public async Task Execute(DepositInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed."); return; } ICredit credit = account.Deposit(_entityFactory, input.Amount); await _accountRepository.Update(account, credit); // Publish the event to the enterprice service bus await _serviceBus.PublishEventAsync(new Shared.Events.DepositCompleted() { AccountId = input.AccountId, Amount = input.Amount.ToMoney().ToDecimal() }); await _unitOfWork.Save(); DepositOutput output = new DepositOutput( credit, account.GetCurrentBalance() ); _outputHandler.Default(output); }
public async Task Execute(GetCustomerDetailsInput input) { ICustomer customer = await _customerRepository.Get(input.CustomerId); if (customer == null) { _outputHandler.NotFound($"The customer {input.CustomerId} does not exist or is not processed yet."); return; } List <Boundaries.GetCustomerDetails.Account> accounts = new List <Boundaries.GetCustomerDetails.Account>(); foreach (Guid accountId in customer.Accounts.GetAccountIds()) { IAccount account = await _accountRepository.Get(accountId); if (account != null) { Boundaries.GetCustomerDetails.Account accountOutput = new Boundaries.GetCustomerDetails.Account(account); accounts.Add(accountOutput); } } GetCustomerDetailsOutput output = new GetCustomerDetailsOutput(customer, accounts); _outputHandler.Default(output); }
public async Task Execute(TransferInput input) { IAccount originAccount = await _accountRepository.Get(input.OriginAccountId); if (originAccount == null) { _outputHandler.Error($"The account {input.OriginAccountId} does not exist or is already closed."); return; } IAccount destinationAccount = await _accountRepository.Get(input.DestinationAccountId); if (destinationAccount == null) { _outputHandler.Error($"The account {input.DestinationAccountId} does not exist or is already closed."); return; } IDebit debit = originAccount.Withdraw(_entityFactory, input.Amount); ICredit credit = destinationAccount.Deposit(_entityFactory, input.Amount); await _accountRepository.Update(originAccount, debit); await _accountRepository.Update(destinationAccount, credit); await _unitOfWork.Save(); TransferOutput output = new TransferOutput( debit, originAccount.GetCurrentBalance(), input.OriginAccountId, input.DestinationAccountId); _outputHandler.Default(output); }
public async Task Execute(WithdrawInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed."); return; } IDebit debit = account.Withdraw(_entityFactory, input.Amount); if (debit == null) { _outputHandler.Error($"The account {input.AccountId} does not have enough funds to withdraw {input.Amount}."); return; } await _accountRepository.Update(account, debit); await _unitOfWork.Save(); WithdrawOutput output = new WithdrawOutput( debit, account.GetCurrentBalance() ); _outputHandler.Default(output); }
public async Task Execute(RefundInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed."); return; } IDebit debit = account.Withdraw(_entityFactory, input.Amount); if (debit == null) { _outputHandler.Error($"The account {input.AccountId} does not have enough funds to withdraw {input.Amount}."); return; } await _accountRepository.Update(account, debit); // Publish the event to the enterprice service bus await _serviceBus.PublishEventAsync(new Shared.Events.WithdrawCompleted() { AccountId = input.AccountId, Amount = input.Amount.ToMoney().ToDecimal() }); await _unitOfWork.Save(); RefundOutput output = new RefundOutput( debit, account.GetCurrentBalance() ); _outputHandler.Default(output); }
public async Task Execute(CloseAccountInput closeAccountInput) { IAccount account = await _accountRepository.Get(closeAccountInput.AccountId); if (account == null) { _outputHandler.Error($"The account '{closeAccountInput.AccountId}' does not exist or is already closed."); return; } if (account.IsClosingAllowed()) { await _accountRepository.Delete(account); // Publish the event to the enterprice service bus await _serviceBus.PublishEventAsync(new Shared.Events.CloseAccountCompleted() { AccountId = account.Id }); await _unitOfWork.Save(); } var closeAccountOutput = new CloseAccountOutput(account); _outputHandler.Default(closeAccountOutput); }
public async Task Execute(GetAccountDetailsInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.NotFound($"The account {input.AccountId} does not exist or is not processed yet."); return; } GetAccountDetailsOutput output = new GetAccountDetailsOutput(account); _outputHandler.Default(output); }
public async Task Execute(CloseAccountInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed."); return; } if (account.IsClosingAllowed()) { await _accountRepository.Delete(account); } var output = new CreateAccountOutput(account); _outputHandler.Default(output); }
public async Task Execute(TransferInput input) { IAccount originAccount = await _accountRepository.Get(input.OriginAccountId); if (originAccount == null) { _outputHandler.Error($"The account {input.OriginAccountId} does not exist or is already closed."); return; } IAccount destinationAccount = await _accountRepository.Get(input.DestinationAccountId); if (destinationAccount == null) { _outputHandler.Error($"The account {input.DestinationAccountId} does not exist or is already closed."); return; } IDebit debit = originAccount.Withdraw(_entityFactory, input.Amount); ICredit credit = destinationAccount.Deposit(_entityFactory, input.Amount); await _accountRepository.Update(originAccount, debit); await _accountRepository.Update(destinationAccount, credit); // Publish the event to the enterprice service bus await _serviceBus.PublishEventAsync(new Shared.Events.TransferCompleted() { OriginalAccountId = originAccount.Id, DestinationAccountId = destinationAccount.Id, Amount = input.Amount.ToMoney().ToDecimal() }); await _unitOfWork.Save(); TransferOutput output = new TransferOutput( debit, originAccount.GetCurrentBalance(), input.OriginAccountId, input.DestinationAccountId); _outputHandler.Default(output); }
public async Task Execute(DepositInput input) { IAccount account = await _accountRepository.Get(input.AccountId); if (account == null) { _outputHandler.Error($"The account {input.AccountId} does not exist or is already closed."); return; } ICredit credit = account.Deposit(_entityFactory, input.Amount); await _accountRepository.Update(account, credit); await _unitOfWork.Save(); DepositOutput output = new DepositOutput( credit, account.GetCurrentBalance() ); _outputHandler.Default(output); }