public async Task NoWithdrawalFromEmptyWallet()
        {
            CreateTransactionOrderCommand command = new CreateTransactionOrderCommand
            {
                Value     = -50000,
                Timestamp = 1605037286186,
                WalletId  = "1735613419",
            };

            Assert.Null((await walletController.CreateTransaction(command)));
        }
        public async Task CanCreateTransactionAsync()
        {
            CreateTransactionOrderCommand command = new CreateTransactionOrderCommand
            {
                Value     = 3000,
                Timestamp = 1605037286186,
                WalletId  = "1735613419",
            };

            Assert.NotNull((await walletController.CreateTransaction(command)).Value);
        }
        public async Task <ActionResult <Transaction> > CreateTransaction(CreateTransactionOrderCommand command)
        {
            try
            {
                var wallet = await _walletContext.Wallets.Where(x => x.Id == command.WalletId).FirstOrDefaultAsync();

                if (wallet == null)
                {
                    return(null);
                }

                if ((wallet.Balance + command.Value) < 0)
                {
                    return(null);
                }

                wallet.Balance += command.Value;
                var transactionDoc = new Transaction
                {
                    WalletId      = command.WalletId,
                    Type          = (command.Value > 0) ? TransactionType.Deposit : TransactionType.Withdrawal,
                    WalletBalance = wallet.Balance,
                    Amount        = Math.Abs(command.Value),
                    CreatedAt     = DateTime.Now,
                    Timestamp     = command.Timestamp
                };
                _txContext.Transactions.Add(transactionDoc);
                await _txContext.SaveChangesAsync();

                _walletContext.Entry(wallet).State = EntityState.Modified;
                await _walletContext.SaveChangesAsync();

                return(transactionDoc);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                return(null);
            }
        }
Пример #4
0
 public async Task <ActionResult <Transaction> > CreateTransaction(CreateTransactionOrderCommand command)
 {
     return(await _txWriteService.CreateTransaction(command));
 }