public void Handle(TransactionInfoMessage message) { var m = message as TransactionInfoMessage; switch (m.Operation) { case TransactionInfoMessage.TransactionOperation.Reconcile: { TransactionInfo info; transactions.TryPeek(out info); if (info.Balance == m.Account.CurrentBalance) { OutputAction.Action.Send(new Output() { Message = "Account with ID :" + m.Account.Id + " current balance reconciles" }); } else { OutputAction.Action.Send(new Output() { Message = "Account with ID :" + m.Account.Id + " current balance DO NOT reconciles" }); } } break; case TransactionInfoMessage.TransactionOperation.Statement: { var statmentlist = transactions.ToList(); OutputAction.Action.SendSync(new Output() { Message = "Statement for Account ID :" + m.Account.Id }); statmentlist.ForEach(s => { OutputAction.Action.SendSync(new Output() { Message = s.ToString() }); }); } break; default: break; } }
public void Handle(Message message) { AccountOperation accountOperation = message as AccountOperation; switch (accountOperation.OperationType) { case OperationType.NewAccount: { var ad = new AccountDetail(); var a = ad.AccountAction.ProceesSync(new AccountMessage() { Account = accountOperation.Account, MessageType = AccountMessage.AccountMessageType.AddAccount }); if (a != null) { var am = a as AccountMessage; OutputAction.Action.SendSync(new Output() { Message = "Account Opened , ID : " + am.Account.Id + " Name :" + am.Account.Name }); activeAccounts.GetOrAdd(am.Account.Id, ad); } break; } case OperationType.Credit: { var ad = activeAccounts[accountOperation.Account.Id]; var tr = new TransactionInfoMessage(); tr.Account = GetAccountMessage(ad, accountOperation).Account; tr.TransactionInfo = new Data.TransactionInfo(tr.Account.Id, Data.TransactionType.Credit, accountOperation.TransactionAmount); var accountMessage = ad.TransactionAction.ProceesSync(tr); DoTransactionReconcile(ad, tr.Account); break; } case OperationType.Debit: { var ad = activeAccounts[accountOperation.Account.Id]; var tr = new TransactionInfoMessage(); tr.Account = GetAccountMessage(ad, accountOperation).Account; tr.TransactionInfo = new Data.TransactionInfo(tr.Account.Id, Data.TransactionType.Debit, accountOperation.TransactionAmount); var accountMessage = ad.TransactionAction.ProceesSync(tr); DoTransactionReconcile(ad, tr.Account); break; } case OperationType.BalanceInfo: var aBalInfo = activeAccounts[accountOperation.Account.Id].AccountAction.ProcessMessage(new AccountMessage() { Account = accountOperation.Account, MessageType = AccountMessage.AccountMessageType.GetAccountInfo }) as AccountMessage; if (aBalInfo != null && aBalInfo.Account == null) { OutputAction.Action.Send(new Output() { Message = string.Format("Account with ID : {0} Current balance {1}", aBalInfo.Account.Id, aBalInfo.Account.CurrentBalance) }); } break; case OperationType.ListOfTransactions: { var acc = activeAccounts[accountOperation.Account.Id].AccountAction.ProcessMessage(new AccountMessage() { Account = accountOperation.Account, MessageType = AccountMessage.AccountMessageType.GetAccountInfo }) as AccountMessage; if (acc != null && acc.Account != null) { activeAccounts[accountOperation.Account.Id].TransactionAction.Send(new TransactionInfoMessage() { Account = acc.Account, Operation = TransactionInfoMessage.TransactionOperation.Statement }); } } break; case OperationType.UpdateBalance: activeAccounts[accountOperation.Account.Id].AccountAction.Send(new AccountMessage() { Account = accountOperation.Account, MessageType = AccountMessage.AccountMessageType.UpdateBalance }); break; default: break; } }