예제 #1
0
        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));
            }
        }
예제 #6
0
        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");
        }