public CommandResponse DepositCheck(Guid accountId, decimal amount) { var account = _repo.GetById <AccountAggregate>(accountId); var depositCheckCommand = new DepositCheckCommand { AccountId = account.Id, Amount = amount }; return(_cmdHandler.Handle(depositCheckCommand)); }
public void CannotDepositCheckIntoInvalidAccount() { var cmd = new DepositCheckCommand { AccountId = AccountId, Amount = Convert.ToDecimal(100m) }; dynamic msg = CmdHandler.Handle(cmd); Assert.IsType <Fail>(msg); Assert.Equal("No account with this ID exists", msg.Exception.Message); }
public void CanDepositCheck(decimal amount) { CmdHandler.Handle(new CreateAccountCommand { AccountId = AccountId, HolderName = "John Doe" }); var cmd = new DepositCheckCommand { AccountId = AccountId, Amount = amount }; Assert.IsType <Success>(CmdHandler.Handle(cmd)); }
public void CannotDepositCheckWithNonPositiveAmount(decimal amount) { CmdHandler.Handle(new CreateAccountCommand { AccountId = AccountId, HolderName = "John Doe" }); var cmd = new DepositCheckCommand { AccountId = AccountId, Amount = amount }; dynamic msg = CmdHandler.Handle(cmd); Assert.IsType <Fail>(msg); Assert.Equal("Cannot deposit a negative amount", msg.Exception.Message); }
public CommandResponse Handle(DepositCheckCommand command) { try { if (!_repository.TryGetById <AccountAggregate>(command.AccountId, out var account)) { throw new ValidationException("No account with this ID exists"); } account.Credit(command.Amount, "check", command); _repository.Save(account); return(command.Succeed()); } catch (Exception e) { return(command.Fail(e)); } }
public void Run() { var cmd = new[] { "" }; AccountAggregate acct; do { cmd = Console.ReadLine().Split(' '); switch (cmd[0].ToLower()) { case "conn": _accountId = Guid.Parse(cmd[1]); acct = repo.GetById <AccountAggregate>(_accountId); _holderName = acct.HolderName; _readModel.redraw(acct); break; case "list": foreach (var account in _readModel.Accounts) { Console.WriteLine(account.Id + "\t" + account.HolderName); } break; case "new": _accountId = Guid.NewGuid(); if (cmd.Length > 1) { _holderName = cmd[1]; } var createCommand = new CreateAccountCommand() { AccountId = _accountId, HolderName = _holderName }; cmdHandler.Handle(createCommand); break; case "deposit": acct = repo.GetById <AccountAggregate>(_accountId); try { if (cmd[1].ToLower() == "cash") { var depositCashCommand = new DepositCashCommand() { AccountId = acct.Id, Amount = decimal.Parse(cmd[2]) }; cmdHandler.Handle(depositCashCommand); } else if (cmd[1].ToLower() == "check") { var depositCheckCommand = new DepositCheckCommand() { AccountId = acct.Id, Amount = decimal.Parse(cmd[2]) }; cmdHandler.Handle(depositCheckCommand); } Console.WriteLine($"Deposit {cmd[2]}"); } catch (Exception e) { Console.WriteLine("Command should be:\n\tdeposit {type} {amount}\n\ttype : 'cash' or 'check'\n\tamount : number"); } break; case "withdraw": try { acct = repo.GetById <AccountAggregate>(_accountId); var withdrawCommand = new WithdrawCashCommand { AccountId = acct.Id, Amount = decimal.Parse(cmd[1]) }; cmdHandler.Handle(withdrawCommand); Console.WriteLine($"Withdraw {cmd[1]}"); } catch (Exception e) { Console.WriteLine(e); } break; case "overdraft": acct = repo.GetById <AccountAggregate>(_accountId); try { var setOverDraftLimit = new SetOverDraftLimitCommand() { AccountId = acct.Id, OverDraftLimit = decimal.Parse(cmd[1]) }; cmdHandler.Handle(setOverDraftLimit); Console.WriteLine($"setting overdraftLimit to {cmd[1]}"); } catch (Exception e) { Console.WriteLine(e.Message); } break; case "daily": acct = repo.GetById <AccountAggregate>(_accountId); try { var setDailyWireTransferLimit = new SetDailyWireTransferLimitCommand() { AccountId = acct.Id, DailyWireTransferLimit = decimal.Parse(cmd[1]) }; cmdHandler.Handle(setDailyWireTransferLimit); Console.WriteLine($"setting dailyWireTransferLimit to {cmd[1]}"); } catch (Exception e) { Console.WriteLine(e.Message); } break; } } while (cmd[0].ToLower() != "exit"); }