public MakePaymentResult MakePayment(MakePaymentRequest request) { var result = new MakePaymentResult(); Account account = _accountDataStore.GetAccount(request.DebtorAccountNumber); if (account != null) { IPaymentRequestValidator paymentRequestValidator = _paymentSchemeValidatorService.GetPaymentSchemeValidator(request.PaymentScheme); if (paymentRequestValidator == null) { result.Success = false; } else { result.Success = paymentRequestValidator.IsValid(account, request); } } if (result.Success) { account.Balance -= request.Amount; _accountDataStore.UpdateAccount(account); } return result; }
public async Task <IActionResult> MakePayment(PaymentRequestDto paymentRequest) { IActionResult result; try { if (paymentRequest == null || !paymentRequestValidator.IsValid(paymentRequest)) { return(BadRequest(paymentRequest)); } var bankResponse = await Task.Run(() => { return(acquiringBank.PaymentIsApproved(paymentRequest)); }); await Task.Run(() => { paymentStorage.Store(bankResponse.id, new PaymentStorageObject(paymentRequest, bankResponse.status)); }); if (bankResponse.status) { result = Ok(new PaymentResponseDto(paymentRequest, bankResponse)); } else { result = StatusCode(StatusCodes.Status401Unauthorized); } return(result); } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e.Message)); } }
public MakePaymentResult MakePayment(MakePaymentRequest request) { var result = new MakePaymentResult() { Success = false }; //NOTE : We could move this validation logic to PaymentController class var validator = _paymentValidator.IsValid(request); if (!validator.IsValid) { return(result); } // To check the payment scheme and validations var paymentScheme = _paymentFact.GetPaymentScheme(request.PaymentScheme); if (paymentScheme == null) { return(result); } var debtorAccount = _accountRepo.AccountDataStore.GetAccount(request.DebtorAccountNumber); if (paymentScheme.MakePayment(debtorAccount, request)) { _accountRepo.AccountDataStore.UpdateAccount(debtorAccount); result.Success = true; } return(result); }