protected override void HandleTransfer(CAP_CQRSEntities entities, TransferMessage transfer) { Console.WriteLine(String.Format("Decrease {0}.", transfer.FromAccount)); AccountBalance from = GetAccountEntity(transfer.FromAccount, entities); from.Balance -= transfer.Amount; }
protected override void HandleTransfer(CAP_CQRSEntities entities, TransferMessage transfer) { Console.WriteLine(String.Format("Increase {0}.", transfer.ToAccount)); AccountBalance to = GetAccountEntity(transfer.ToAccount, entities); to.Balance += transfer.Amount; }
// TODO 2d: Command doesn't update current state. public void Transfer(string fromAccount, string toAccount, decimal amount) { try { using (CAP_CQRSEntities entities = new CAP_CQRSEntities()) { using (var tx = new TransactionScope()) { AccountBalance from = GetAccountEntity(fromAccount, entities); if (from.Balance < amount) throw new ApplicationException("Insufficient funds."); // INSERT entities.AddToTransfers(new Transfer() { From = fromAccount, To = toAccount, Amount = amount }); // PUBLISH TransferMessage message = new TransferMessage() { FromAccount = fromAccount, ToAccount = toAccount, Amount = amount }; using (var queue = new MessageQueue(IncreaseQueueName)) { queue.Send(message, MessageQueueTransactionType.Automatic); } using (var queue = new MessageQueue(DecreaseQueueName)) { queue.Send(message, MessageQueueTransactionType.Automatic); } entities.SaveChanges(); tx.Complete(); } } } catch (Exception ex) { throw new FaultException(ex.Message); } }
protected abstract void HandleTransfer(CAP_CQRSEntities entities, TransferMessage transfer);