public MakePaymentResult MakePayment(MakePaymentRequest request) { var accountDataStore = _accountDataStoreFactory.GetAccountDataStore(); var account = accountDataStore.GetAccount(request.DebtorAccountNumber); var result = new MakePaymentResult(); result.Success = _paymentValitadionService.ValidatePayment(account, request); if (result.Success) { account.Balance -= request.Amount; accountDataStore.UpdateAccount(account); } return(result); }
public MakePaymentResult MakePayment(MakePaymentRequest request) { Account account = null; var accountDataStore = _accountDataStoreFactory.GetAccountDataStore(); account = accountDataStore.GetAccount(request.DebtorAccountNumber); var result = new MakePaymentResult(); //each code in class PaymentSchemeBacs etc and then Factory and then get from factory. switch (request.PaymentScheme) { case PaymentScheme.Bacs: if (account == null) { result.Success = false; } else if (!account.AllowedPaymentSchemes.HasFlag(AllowedPaymentSchemes.Bacs)) { result.Success = false; } break; case PaymentScheme.FasterPayments: if (account == null) { result.Success = false; } else if (!account.AllowedPaymentSchemes.HasFlag(AllowedPaymentSchemes.FasterPayments)) { result.Success = false; } else if (account.Balance < request.Amount) { result.Success = false; } break; case PaymentScheme.Chaps: if (account == null) { result.Success = false; } else if (!account.AllowedPaymentSchemes.HasFlag(AllowedPaymentSchemes.Chaps)) { result.Success = false; } else if (account.Status != AccountStatus.Live) { result.Success = false; } break; } if (result.Success) { account.Balance -= request.Amount; accountDataStore.UpdateAccount(account); } return(result); }