public void Handle(PostTransactionCommand command) { var bankAccountEntity = repository.LoadById(command.BankAccountId); var bankAccount = MapEntityToDomainObject(bankAccountEntity); var transaction = new Domain.Transaction(command.Amount, command.Description, command.TransactionDate); bankAccount.PostNewTransaction(transaction); }
public void WhenBatching5TransactionsWithOpenBatchTransactionsInBatchIs5() { ApplicationService applicationService = new ApplicationService(_ctx); MessageServices messageService = new MessageServices(_ctx); UserService userService = new UserService(_ctx); PaymentAccountService paymentAccountService = new PaymentAccountService(_ctx); TransactionBatchService transactionBatchService = new TransactionBatchService(_ctx, _logger); var transactionBatchGuid = Guid.NewGuid(); var transactionAmount = 2.75; _ctx.TransactionBatches.Add(new TransactionBatch() { CreateDate = System.DateTime.Now, Id = transactionBatchGuid, IsClosed = true, TotalDepositAmount = 0, TotalNumberOfDeposits = 0, TotalWithdrawalAmount = 0, TotalNumberOfWithdrawals = 0, Transactions = new List <Transaction>() }); _ctx.SaveChanges(); var application = applicationService.AddApplication("Test", "http://www.test.com", true); var sender = userService.AddUser(application.ApiKey, "*****@*****.**", "pdthx123", "*****@*****.**", "1234"); sender.SecurityPin = "2589"; userService.UpdateUser(sender); var senderPaymentAccount = paymentAccountService.AddPaymentAccount(sender.UserId.ToString(), "Sender PaidThx", "053000219", "1234123412", "Checking"); sender.PaymentAccounts = new System.Collections.ObjectModel.Collection <PaymentAccount>(); sender.PaymentAccounts.Add(senderPaymentAccount); var transaction1 = new Domain.Transaction() { Amount = 1, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Withdrawal, User = sender }; var transaction2 = new Domain.Transaction() { Amount = 2, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Withdrawal, User = sender }; var transaction3 = new Domain.Transaction() { Amount = 3, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Deposit, User = sender }; var transaction4 = new Domain.Transaction() { Amount = 4, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Deposit, User = sender }; var transaction5 = new Domain.Transaction() { Amount = 5, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Deposit, User = sender }; transactionBatchService.BatchTransactions(new List <Transaction>() { transaction1, transaction2, transaction3, transaction4, transaction5 }); var transactionBatch = transactionBatchService.GetOpenBatch(); Assert.AreEqual(5, transactionBatch.Transactions.Count); Assert.AreEqual(3, transactionBatch.TotalNumberOfDeposits); Assert.AreEqual(2, transactionBatch.TotalNumberOfWithdrawals); }
public void BatchTransactions(Message message) { var transactionBatch = GetOpenBatch(); var withDrawalTransaction = new Domain.Transaction() { Amount = message.Amount, Category = Domain.TransactionCategory.Payment, CreateDate = System.DateTime.Now, FromAccountId = message.SenderAccountId.Value, Id = Guid.NewGuid(), MessageId = message.Id, PaymentChannelType = Domain.PaymentChannelType.Single, StandardEntryClass = Domain.StandardEntryClass.Web, Status = Domain.TransactionStatus.Pending, TransactionBatchId = transactionBatch.Id, Type = Domain.TransactionType.Withdrawal, UserId = message.SenderId, Message = message, }; transactionBatch.Transactions.Add(withDrawalTransaction); transactionBatch.TotalNumberOfWithdrawals += 1; transactionBatch.TotalWithdrawalAmount += withDrawalTransaction.Amount; Transaction deposit; if (message.Recipient != null && message.Recipient.PaymentAccounts.Count > 0) { _logger.Log(LogLevel.Info, String.Format("Found Recipient {0} for Message {1}", message.Recipient.UserId, message.Id)); var depositTransaction = new Domain.Transaction() { Amount = message.Amount, Category = Domain.TransactionCategory.Payment, CreateDate = System.DateTime.Now, FromAccountId = message.Recipient.PaymentAccounts[0].Id, Id = Guid.NewGuid(), MessageId = message.Id, PaymentChannelType = Domain.PaymentChannelType.Single, StandardEntryClass = Domain.StandardEntryClass.Web, Status = Domain.TransactionStatus.Pending, TransactionBatchId = transactionBatch.Id, Type = Domain.TransactionType.Deposit, UserId = message.Recipient.UserId, }; transactionBatch.Transactions.Add(depositTransaction); transactionBatch.TotalNumberOfDeposits += 1; transactionBatch.TotalDepositAmount += depositTransaction.Amount; message.Recipient = message.Recipient; } message.MessageStatus = Domain.MessageStatus.Pending; message.LastUpdatedDate = System.DateTime.Now; _ctx.SaveChanges(); }
public void VerifyTX(Domain.Transaction tx) { Console.WriteLine("Contain Pool " + pool.ContainsKey(tx.HashStr)); Console.WriteLine("Pool Count" + pool.Count); }
public void VerifyTX(Domain.Transaction tx) { Log.Debug("Contain Pool " + pool.ContainsKey(tx.HashStr)); Log.Debug("Pool Count" + pool.Count); }
public async Task <bool> Contains(Domain.Transaction tx) => await TransactionPool.Contains(tx);
public async Task <bool> Add(Domain.Transaction tx) => await TransactionPool.Add(tx);
public void WhenBatching3TransactionsWithOpenBatchTransactionsInBatchIs3() { ApplicationService applicationService = new ApplicationService(_ctx); MessageServices messageService = new MessageServices(_ctx); UserService userService = new UserService(_ctx); PaymentAccountService paymentAccountService = new PaymentAccountService(_ctx); TransactionBatchService transactionBatchService = new TransactionBatchService(_ctx, _logger); var transactionBatchGuid = Guid.NewGuid(); var transactionAmount = 2.75; _ctx.TransactionBatches.Add(new TransactionBatch() { CreateDate = System.DateTime.Now, Id = transactionBatchGuid, IsClosed = true, TotalDepositAmount = 0, TotalNumberOfDeposits = 0, TotalWithdrawalAmount = 0, TotalNumberOfWithdrawals = 0, Transactions = new List<Transaction>() }); _ctx.SaveChanges(); var application = applicationService.AddApplication("Test", "http://www.test.com", true); var sender = userService.AddUser(application.ApiKey, "*****@*****.**", "pdthx123", "*****@*****.**", "1234"); sender.SecurityPin = "2589"; userService.UpdateUser(sender); var senderPaymentAccount = paymentAccountService.AddPaymentAccount(sender.UserId.ToString(), "Sender PaidThx", "053000219", "1234123412", "Checking"); sender.PaymentAccounts = new System.Collections.ObjectModel.Collection<PaymentAccount>(); sender.PaymentAccounts.Add(senderPaymentAccount); var transaction1 = new Domain.Transaction() { Amount = 1, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Withdrawal, User = sender }; var transaction2 = new Domain.Transaction() { Amount = 2, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Withdrawal, User = sender }; var transaction3 = new Domain.Transaction() { Amount = 3, Category = TransactionCategory.Payment, FromAccount = senderPaymentAccount, CreateDate = System.DateTime.Now, Id = Guid.NewGuid(), PaymentChannelType = PaymentChannelType.Single, StandardEntryClass = StandardEntryClass.Web, Status = TransactionStatus.Submitted, Type = TransactionType.Deposit, User = sender }; transactionBatchService.BatchTransactions(new List<Transaction>() { transaction1, transaction2, transaction3 }); var transactionBatch = transactionBatchService.GetOpenBatch(); Assert.AreEqual(3, transactionBatch.Transactions.Count); Assert.AreEqual(1, transactionBatch.TotalNumberOfDeposits); Assert.AreEqual(2, transactionBatch.TotalNumberOfWithdrawals); }