Пример #1
0
        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();
        }
Пример #4
0
 public void VerifyTX(Domain.Transaction tx)
 {
     Console.WriteLine("Contain Pool " + pool.ContainsKey(tx.HashStr));
     Console.WriteLine("Pool Count" + pool.Count);
 }
        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();
        }
Пример #6
0
 public void VerifyTX(Domain.Transaction tx)
 {
     Log.Debug("Contain Pool " + pool.ContainsKey(tx.HashStr));
     Log.Debug("Pool Count" + pool.Count);
 }
Пример #7
0
 public async Task <bool> Contains(Domain.Transaction tx) =>
 await TransactionPool.Contains(tx);
Пример #8
0
 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);
        }