Exemplo n.º 1
0
        public async Task Handler(TransferCommand command)
        {
            if (command.Amount > 0)
            {
                var accountSender   = _context.Accounts.SingleOrDefault(x => x.AccountId == command.AccountId_Sender);
                var accountReciever = _context.Accounts.SingleOrDefault(x => x.AccountId == command.AccountId_Reciever);

                if (accountSender.Balance >= command.Amount)
                {
                    accountSender.Balance   -= command.Amount;
                    accountReciever.Balance += command.Amount;

                    var transactionCommand = new CreateTransferTransactionCommand()
                    {
                        Amount   = command.Amount,
                        Reciever = accountReciever,
                        Sender   = accountSender
                    };

                    var query = new CreateTransferTransactionHandler().Handler(transactionCommand);

                    await _context.SaveChangesAsync();
                }
                else
                {
                    throw new InsufficientFundsException();
                }
            }
            else
            {
                throw new NegativeAmountException();
            }
        }
        public async Task Handler(CreateTransferTransactionCommand command)
        {
            var transactionSender = new Transaction()
            {
                AccountId = command.Sender.AccountId,
                Date      = DateTime.Now,
                Type      = "Debit",
                Operation = $"Transfer to {command.Reciever.AccountId}",
                Amount    = command.Amount,
                Balance   = command.Sender.Balance - command.Amount,
                Bank      = "CT"
            };

            var transactionReciever = new Transaction()
            {
                AccountId = command.Reciever.AccountId,
                Date      = DateTime.Now,
                Type      = "Credit",
                Operation = $"Transfer from {command.Reciever.AccountId}",
                Amount    = command.Amount,
                Balance   = command.Reciever.Balance + command.Amount,
                Bank      = "CT"
            };

            await _context.Transactions.AddRangeAsync(transactionReciever, transactionSender);

            await _context.SaveChangesAsync();
        }