示例#1
0
        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;
        }
示例#2
0
        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));
            }
        }
示例#3
0
        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);
        }