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); } }
public async Task <ActionResult <Transaction> > CreateTransaction(CreateTransactionOrderCommand command) { return(await _txWriteService.CreateTransaction(command)); }