public async Task <ActionResult> Get(int nsu) { var entity = await _paymentService.Get(nsu); if (entity == null) { return(NotFound($"No payment found for Nsu = {nsu}")); } return(Ok(entity)); }
public async Task <PaymentProcessResult> ProcessPayment(PaymentRequest request, DateTime transactionDate) { if (request.RawValue <= FixedTax) { var rejectedPayment = new PaymentEntity { TransactionDate = transactionDate, Approved = false, CancelDate = transactionDate, RawValue = request.RawValue, Tax = FixedTax, CreditCard = request.CreditCard.Substring(12), }; await _paymentDbService.Create(rejectedPayment); return(_resultService.GenerateFailedResult(rejectedPayment, $"{nameof(request.RawValue)} must be greater then the {nameof(FixedTax)} ({FixedTax})")); } if (request.PaymentInstallmentCount == 0) { request.PaymentInstallmentCount = 1; } if (request.CreditCard.Substring(0, 4) == UnprocessableCreditCard) { var rejectedPayment = new PaymentEntity { TransactionDate = transactionDate, Approved = false, CancelDate = transactionDate, RawValue = request.RawValue, LiquidValue = request.RawValue - FixedTax, Tax = FixedTax, CreditCard = request.CreditCard.Substring(12), }; await _paymentDbService.Create(rejectedPayment); return(_resultService.GenerateFailedResult(rejectedPayment, $"{nameof(request.CreditCard)} denied.")); } var payment = new PaymentEntity { TransactionDate = transactionDate, Approved = true, AprovalDate = transactionDate, RawValue = request.RawValue, LiquidValue = request.RawValue - FixedTax, Tax = FixedTax, CreditCard = request.CreditCard.Substring(12), PaymentInstallmentCount = request.PaymentInstallmentCount }; await _paymentDbService.Create(payment); for (int i = 1; i <= request.PaymentInstallmentCount; i++) { await _paymentInstallmentDbService.Create(new PaymentInstallmentEntity { PaymentId = payment.Id, RawValue = request.RawValue / request.PaymentInstallmentCount, LiquidValue = payment.LiquidValue / request.PaymentInstallmentCount, InstallmentNumber = i, DueDate = transactionDate.AddDays(i * 30), }); } var entity = await _paymentDbService.Get(payment.Id); var result = _resultService.GenerateResult(entity, true); return(result); }