public async Task Handle(CompleteTransfer completeTransfer, IMessageHandlerContext context) { try { log.Info($"CompleteTransferHandler, TransferId = {completeTransfer.TransactionId}"); var nHibernateSession = context.SynchronizedStorageSession.Session(); var transactionId = TransactionId.FromExisting(completeTransfer.TransactionId); var transaction = nHibernateSession.Get<Transaction>(transactionId) ?? Transaction.NonExisting(); if (transaction.DoesNotExist()) { return; } transaction.Complete(); transaction.ChangeUpdatedAt(); nHibernateSession.Save(transaction); var transferCompleted = new TransferCompleted ( completeTransfer.TransactionId ); await context.Publish(transferCompleted); } catch (Exception ex) { log.Error(ex.Message + " ** " + ex.StackTrace); } }
public static Transaction NonExisting() { DateTime Now = DateTime.Now; TransactionId transactionId = TransactionId.FromExisting(null); BankAccountId fromBankAccountId = BankAccountId.FromExisting(null); BankAccountId toBankAccountId = BankAccountId.FromExisting(null); return(new Transaction( transactionId, fromBankAccountId, toBankAccountId, null, TransactionStateId.NULL, Now, Now)); }
public async Task Handle(StartTransfer startTransfer, IMessageHandlerContext context) { try { log.Info($"StartTransferHandler, TransactionId = {startTransfer.TransactionId}"); var nHibernateSession = context.SynchronizedStorageSession.Session(); var transactionId = TransactionId.FromExisting(startTransfer.TransactionId); var fromBankAccount = nHibernateSession.Query <BankAccount>().FirstOrDefault (x => x.BankAccountNumber.Number == startTransfer.FromBankAccountNumber) ?? BankAccount.NonExisting(); if (fromBankAccount.DoesNotExist()) { return; } var toBankAccount = nHibernateSession.Query <BankAccount>().FirstOrDefault (x => x.BankAccountNumber.Number == startTransfer.ToBankAccountNumber) ?? BankAccount.NonExisting(); if (toBankAccount.DoesNotExist()) { return; } var money = Money.Dollars(startTransfer.Amount); var transactionState = TransactionStateId.STARTED; var now = DateTime.UtcNow; var transaction = new Transaction( transactionId, fromBankAccount.BankAccountId, toBankAccount.BankAccountId, money, transactionState, now, now ); nHibernateSession.Save(transaction); var transferStarted = new TransferStarted ( startTransfer.TransactionId, fromBankAccount.BankAccountId.Id, toBankAccount.BankAccountId.Id, startTransfer.Amount ); await context.Publish(transferStarted); } catch (Exception ex) { log.Error(ex.Message + " ** " + ex.StackTrace); } }