public async Task <ResponseCardPaymentDto> PersistPaymentRequestToDatabase(RequestCardPaymentDto requestDto, ResponseExternalPaymentDto responseDto, ValidationData validationData) { var paymentEntity = _mapper.Map <RequestCardPaymentDto, Payment>(requestDto); paymentEntity.CurrencyId = validationData.Currency.Id; paymentEntity.Method = PaymentMethods.Card.ToString(); var paymentCardEntity = await _paymentCardRepository.GetPaymentCardByNumberAsync(requestDto.Number); // if payment card exists do not add new record of it in database if (paymentCardEntity != null) { paymentEntity.PaymentCardId = paymentCardEntity.Id; } else { paymentCardEntity = _mapper.Map <RequestCardPaymentDto, PaymentCard>(requestDto); paymentCardEntity.CardIssuerId = validationData.CardIssuer.Id; paymentEntity.PaymentCard = paymentCardEntity; } _mapper.Map(responseDto, paymentEntity); _paymentRepository.AddPayment(paymentEntity); await _paymentRepository.CommitAsync(); var responseCardpaymentDto = _mapper.Map <Payment, ResponseCardPaymentDto>(paymentEntity); return(responseCardpaymentDto); }
public async Task <IActionResult> CreateCardPayment(RequestCardPaymentDto dto) { var validationData = await _paymentValidationService.ValidateAsync(dto.Number, dto.Cvv, dto.Currency, dto.Amount); var externalRequestDto = _mapper.Map <RequestCardPaymentDto, RequestExternalPaymentDto>(dto); var externalResponseDto = await _paymentService.PayThroughAcquiringBankAsync(externalRequestDto); if (externalResponseDto != null) { var responseCardpaymentDto = await _paymentService.PersistPaymentRequestToDatabase(dto, externalResponseDto, validationData); return(CreatedAtRoute(nameof(GetPayment), new { identifier = responseCardpaymentDto.Identifier }, responseCardpaymentDto)); } return(BadRequest()); }