private Task <EntityEventResult> HandleCheckCashed(IEntityEvent <Guid> arg)
        {
            var cce = (CheckCashedEvent)arg;

            Balance -= cce.Amount;

            if (Balance < 0)
            {
                //we overdrafted!  we put out another event to let the system handle this
                var overdraftEvent = new AccountOverdrawnEvent(Id);
                EventPipeline.AddEvent <CheckingAccount>(overdraftEvent);
            }

            return(Task.FromResult(EntityEventResult.Applied));
        }
Beispiel #2
0
        public void Handle(CreateNewTransactionCommand message)
        {
            var dataContext = new TransactionsDataContext();

            var accountBalance = dataContext.Transactions.Sum(x => x.Amount);

            if (accountBalance <= -100 && message.Amount < 0)
            {
                Bus.Return((int)TransactionProcessedEvent.Failure);
                return;
            }

            var transaction = new Transaction
            {
                Amount          = message.Amount,
                Description     = message.Description,
                TransactionDate = message.TransactionDate
            };

            dataContext.Transactions.InsertOnSubmit(transaction);
            dataContext.SubmitChanges();
            Console.WriteLine(string.Format("New transaction added: {0}", transaction.TransactionId));
            Bus.Return((int)TransactionProcessedEvent.Success);

            accountBalance += transaction.Amount;
            if (accountBalance >= 0)
            {
                return;
            }

            var accountOverdrawnEvent = new AccountOverdrawnEvent
            {
                Balance           = accountBalance,
                EmailAddress      = "*****@*****.**",
                TransactionAmount = transaction.Amount
            };

            Bus.Publish(accountOverdrawnEvent);
        }