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)); }
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); }