Exemple #1
0
        public async Task <CommandHandlingResult> Handle(CreateTransactionCommand command)
        {
            await _transactionsRepository.TryCreateAsync(command.OrderId, BitCoinCommands.SwapOffchain, "", null, "");

            ChaosKitty.Meow();

            return(CommandHandlingResult.Ok());
        }
        public async Task <IActionResult> Create([FromBody] CreateTransactionCommand command)
        {
            await transactionService.CreateTransactionAsync(command);

            return(Created($"/api/transactions/{command.Id}", new EntityCreatedDto {
                Id = command.Id
            }));
        }
        public async Task <IActionResult> CreateTransaction([FromBody] CreateTransactionCommand createTransactionCommand)
        {
            var userId = User.GetUserId() ?? default;

            createTransactionCommand.UserId = userId;
            var response = await Mediator.Send(createTransactionCommand);

            return(Created($"/v1/transactions/{response.TransactionId}", response));
        }
        public void UpdateCustomerEmotion(CustomerModel customer, CreateTransactionCommand command)
        {
            customer.LastestCustomerEmotion = command.CustomerEmotion;
            customer.EmotionProbability     = command.CustomerEmotionProbability;

            context.Entry <CustomerModel>(customer).State = System.Data.Entity.EntityState.Modified;

            context.SaveChanges();
        }
    public async Task <ActionResult <string> > Create(string cardStatementId, [FromBody] CreateTransactionCommand command)
    {
        if (cardStatementId != command.CardStatementId)
        {
            return(BadRequest());
        }

        return(Ok(await Mediator.Send(command)));
    }
        public async Task <IActionResult> PostAsync([FromBody] TransactionCreationDto dto)
        {
            var query  = new CreateTransactionCommand(dto);
            var result = await this.mediator.RunCommandAsync <CreateTransactionCommand, Guid>(query).ConfigureAwait(false);

            return(this.AcceptedAtRoute("TransactionsGetById", new RouteValueDictionary {
                { "id", result }, { "api-version", this.RouteData.Values["api-version"] }
            }));
        }
        private void Handle(CreateTransactionCommand cmd)
        {
            if (!this.ConsumedCommands.TryGetValue(cmd.TransactionId, out var cmdList))
            {
                cmdList = new List <CreateTransactionCommand>();
                this.ConsumedCommands.Add(cmd.TransactionId, cmdList);
            }

            cmdList.Add(cmd);
        }
        private void btTransferMoney_Click(object sender, EventArgs e)
        {
            var cmd = new CreateTransactionCommand()
            {
                FromAccountId = (cbFromAccountId.SelectedItem as AccountDTO).Id, ToAccountId = tbToAccount.Text, Sum = decimal.Parse(tbSumTransfer.Text)
            };

            Client.Execute(cmd);
            MessageBox.Show("Transfer Success!");
            OnDialogResult(System.Windows.Forms.DialogResult.OK);
        }
 private TransactionEntity ToEntity(CreateTransactionCommand createTransaction)
 {
     return(new TransactionEntity
     {
         Id = createTransaction.Id,
         Amount = createTransaction.Amount,
         Currency = createTransaction.Currency,
         Date = createTransaction.Date,
         Status = createTransaction.Status,
         TransactionId = createTransaction.TransactionId
     });
 }
Exemple #10
0
        public async Task PayTransaction(PayTransaction model)
        {
            var command = new CreateTransactionCommand
            {
                TransactionType    = TransactionType.FinancialReceipts,
                ToUserId           = model.ToUserId,
                Amount             = model.Amount,
                FinancialProjectId = model.FinancialProjectId
            };

            await Mediator.Send(command);
        }
        public async Task Create()
        {
            var command = new CreateTransactionCommand();

            _mockMediator.Setup(x => x.Send(command, It.IsAny <CancellationToken>()))
            .ReturnsAsync(123);

            var result = await _sut.Create(command);

            Assert.IsAssignableFrom <OkObjectResult>(result.Result);
            Assert.AreEqual(123, ((OkObjectResult)result.Result).Value);
        }
        public void Handle_ToUserIdIsNull_ShouldThrowValidationException()
        {
            var command = new CreateTransactionCommand
            {
                TransactionType    = 0,
                FinancialProjectId = "DASDASD",
                ToUserId           = null,
                Amount             = 1000
            };

            FluentActions.Invoking(async() => { await SendAsync(command); }).Should().Throw <ValidationException>();
        }
        public void Handle_AmountBelowZero_ShouldThrowValidationException()
        {
            var command = new CreateTransactionCommand
            {
                TransactionType    = TransactionType.FinancialReceipts,
                FinancialProjectId = "DASDASD",
                ToUserId           = SecondUser.Id,
                Amount             = -10
            };

            FluentActions.Invoking(async() => { await SendAsync(command); }).Should().Throw <ValidationException>();
        }
        public async Task Create(CreateTransactionCommand createTransaction)
        {
            var entity = new TransactionEntity
            {
                Id            = createTransaction.Id,
                Amount        = createTransaction.Amount,
                Currency      = createTransaction.Currency,
                Date          = createTransaction.Date,
                Status        = createTransaction.Status,
                TransactionId = createTransaction.TransactionId
            };

            await _context.Transactions.AddAsync(entity);
        }
Exemple #15
0
        public async Task <IActionResult> Post([FromBody] CreateTransactionCommand command)
        {
            try
            {
                var result = await _mediator.Send(command);

                return(Ok(result));
            }
            catch (Exception e)
            {
                _logger.LogError("Create Transaction failed:" + e.Message);
                throw;
            }
        }
        public async Task <ActionResult <bool> > SaveTransaction([FromBody] Transaction transaction)
        {
            var createTransactionCommand = new CreateTransactionCommand()
            {
                Transaction = transaction,
            };
            var result = await _mediator.Send(createTransactionCommand);

            if (result.Type == CommandResultTypeEnum.InvalidInput)
            {
                return(new BadRequestResult());
            }

            return(new OkObjectResult(result.Result));
        }
        public async Task <IActionResult> Withdraw(CreateTransactionCommand command)
        {
            if (ModelState.IsValid)
            {
                command.Operation = "Withdrawal in Cash";
                command.Type      = "Debit";
                var result = await _mediator.Send(command);

                if (result.Success)
                {
                    return(View("TransactionSuccess"));
                }
                TempData["Error"] = result.Message;
                return(View(command));
            }
            return(View(command));
        }
        public async Task <ActionResult <Transaction> > Create([FromBody] CreateTransactionCommand command)
        {
            try
            {
                var authenticationUser = (AuthenticationUser)HttpContext.Items["auth"];
                command.UserId = authenticationUser.UserId;
                var result = await _mediator.Send(command);

                _logger.LogInformation("New transaction from " + command.SenderAccountId + " to " + command.ReceiverAccountId + " in the amount of " + command.Amount + " has been created");
                return(result);
            }
            catch (Exception e)
            {
                _logger.LogError("Transaction creation error");
                return(NotFound());
            }
        }
Exemple #19
0
        public void InvalidAccountDepositTest()
        {
            var testAccount = TestData.MockAccount(_userId);

            _mockAccountRepository.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ThrowsAsync(new Exception());
            _mockTransactionRepository
            .Setup(x => x.Add(It.IsAny <Transaction>())).ReturnsAsync(new Guid());

            var createTransactionCommand = new CreateTransactionCommand()
            {
                AccountId       = new Guid(),
                Amount          = 50m,
                Reference       = "Test Reference",
                TransactionType = TransactionType.Deposit,
                CurrencyType    = "GBP"
            };

            Assert.ThrowsAsync <Exception>(() => _createTransactionCommandHandler.Handle(createTransactionCommand, CancellationToken.None));
        }
        public async Task Handle_ValidId_ShouldDeleteTransaction()
        {
            var projectId = await CreateFinancialProject();

            var transaction = new CreateTransactionCommand
            {
                FinancialProjectId = projectId,
                Amount             = 100,
                ToUserId           = SecondUser.Id,
                TransactionType    = TransactionType.FinancialReceipts
            };

            var transactionId = await SendAsync(transaction);

            var context = CreateContext();

            var oweRecord = context.OweRecords.FirstOrDefault(x => x.UserId == User.Id &&
                                                              x.OwedUserId == SecondUser.Id &&
                                                              x.FinancialProjectId == projectId);

            oweRecord.Should().NotBeNull();
            oweRecord !.Amount.Should().Be(transaction.Amount * -1);

            var deleteTransaction = new DeleteTransactionCommand
            {
                Id = transactionId
            };

            await SendAsync(deleteTransaction);

            context = CreateContext();

            oweRecord = context.OweRecords.FirstOrDefault(x => x.UserId == User.Id &&
                                                          x.OwedUserId == SecondUser.Id &&
                                                          x.FinancialProjectId == projectId);
            oweRecord.Should().NotBeNull();
            oweRecord !.Amount.Should().Be(0);

            var entity = await FindAsync <CoolWebsite.Domain.Entities.Financial.Transaction>(transactionId);

            entity.Should().BeNull();
        }
        public async Task SalesRequest_WithoutStock_ShouldThrowException()
        {
            var partner  = (await TestFramework.DataFactory.AddPartners(1)).First();
            var products = await TestFramework.DataFactory.AddProducts(2);

            var command = new CreateTransactionCommand()
            {
                TransactionType  = Domain.TransactionType.Sales,
                PartnerId        = partner.Id,
                TransactionLines = products.Select(p => new CreateTransactionCommand.TransactionLine()
                {
                    ProductId       = p.Id,
                    ProductQuantity = 5
                }).ToArray()
            };

            FluentActions.Invoking(() => TestFramework.SendAsync(command))
            .Should().ThrowExactly <InputValidationException>()
            .And.Errors.SelectMany(e => e.Value).Should().ContainMatch("*stock*");
        }
Exemple #22
0
        public async Task ValidAccountTransactionsTest(int transactionType, decimal expected)
        {
            var testAccount = TestData.MockAccount(_userId);

            _mockAccountRepository.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(testAccount);
            _mockTransactionRepository
            .Setup(x => x.Add(It.IsAny <Transaction>())).ReturnsAsync(new Guid());

            var createTransactionCommand = new CreateTransactionCommand()
            {
                AccountId       = testAccount.Id,
                Amount          = 50m,
                Reference       = "Test Reference",
                TransactionType = transactionType == 0 ? TransactionType.Deposit : TransactionType.Withdraw,
                CurrencyType    = "GBP"
            };

            var result = await _createTransactionCommandHandler.Handle(createTransactionCommand, CancellationToken.None);

            result.Balance.ShouldBe(expected);
        }
        public async Task <ActionResult <TransactionModel> > PostTransaction(TransactionInputModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var command = new CreateTransactionCommand
            {
                Input = model
            };
            var result = await Mediator.Send(command, HttpContext.RequestAborted)
                         .ConfigureAwait(false);

            if (result.IsFailure)
            {
                return(result.AsActionResult());
            }

            return(CreatedAtAction(nameof(GetTransaction), new { id = result.Value.Id }, result.Value));
        }
        public async Task SalesRequest_ShouldCreateTransaction()
        {
            CreateTransactionCommand.TransactionLine[] lines;
            Partner partner;

            {   // Create procurement transaction to prepare product stock for sales.
                var t = await TestFramework.DataFactory.CreateProcurementTransaction(3);

                lines = t.TransactionLines.Select(x => new CreateTransactionCommand.TransactionLine()
                {
                    ProductId       = x.Product.Id,
                    ProductQuantity = x.Quantity
                }).ToArray();
                partner = t.Partner;
            }

            var command = new CreateTransactionCommand()
            {
                TransactionType  = Domain.TransactionType.Sales,
                PartnerId        = partner.Id,
                TransactionLines = lines
            };

            // Act.
            var result = await TestFramework.SendAsync(command);

            var transaction = await TestFramework.Data.FindAsync <Transaction>(result, x => x.TransactionLines, x => x.Partner);

            transaction.Should().NotBeNull();
            transaction.Partner.Id.Should().Be(partner.Id);
            transaction.Total.Amount.Should().Be(transaction.TransactionLines.Sum(x => x.UnitPrice.Amount * x.Quantity));
            transaction.TransactionLines.Should().HaveSameCount(lines)
            .And.Subject.Select(x => new { x.ProductId, ProductQuantity = x.Quantity })
            .Should().BeEquivalentTo(command.TransactionLines,
                                     o => o.ComparingByMembers <CreateTransactionCommand.TransactionLine>());

            var products = await TestFramework.Data.GetAllAsync <Product>();

            products.Should().Match(x => x.All(p => p.NumberInStock == 0)); // Because we sold the exact amount we procured.
        }
Exemple #25
0
        public async Task <IActionResult> Post([FromBody] CreateTransactionRequest request)
        {
            var command = new CreateTransactionCommand(request.Amount, request.CurrencyCode, request.CardId, request.UniqueId, request.ChargeDate);
            var result  = await commandDispatcher.Dispatch(command);

            if (result.Success)
            {
                var response = new CreateTransactionResponse()
                {
                    Amount       = result.Amount,
                    CardId       = result.CardId,
                    ChargeDate   = result.ChargeDate,
                    CurrencyCode = result.CurrencyCode,
                    Id           = result.Id,
                    UniqueId     = result.UniqueId
                };

                return(CreatedAtAction(null, response));
            }

            return(BadRequest(validationNotificationHandler.Notifications));
        }
Exemple #26
0
        public async Task Handler_creates_new_transaction_with_the_correct_properties()
        {
            var category = Persister <Data.Entity.Category> .New().Persist();

            var transaction = new Data.Entity.Transaction
            {
                CategoryId  = category.Id,
                Debit       = 100,
                Description = "Test transaction",
                Recorded    = DateTime.Now
            };

            var command  = new CreateTransactionCommand(transaction);
            var response = await mediator.ProcessCommandAsync <int>(command);

            Assert.IsTrue(response.Successful, "The command response is successful");

            var createdTransaction = await Context.Transactions.SingleAsync(p => p.Id == response.Result);

            Assert.That.This(createdTransaction).HasSameProperties(transaction, "Id");
            Assert.IsTrue(Context.Categories.Any());
        }
Exemple #27
0
        public async Task <CommandHandlingResult> Handle(CreateTransactionCommand command)
        {
            var sw = new Stopwatch();

            sw.Start();

            try
            {
                await _transactionsRepository.TryCreateAsync(command.OrderId, BitCoinCommands.SwapOffchain, "", null, "");

                ChaosKitty.Meow();

                return(CommandHandlingResult.Ok());
            }
            finally
            {
                sw.Stop();
                _log.Info("Command execution time",
                          context: new { TxHandler = new { Handler = nameof(TradeCommandHandler), Command = nameof(CreateTransactionCommand),
                                                           Time    = sw.ElapsedMilliseconds } });
            }
        }
        public async Task CreateTransactionAsync(CreateTransactionCommand command)
        {
            if (command.Id == Guid.Empty)
            {
                throw new AggregateValidationException("Invalid transaction id");
            }

            var transaction = await transactionRepository.GetAsync(command.Id);

            if (transaction != null)
            {
                throw new AggregateIllegalLogicException("Cannot create transaciton with given id. Transaction exists.");
            }

            var application = new TransactionEntity(
                command.Id,
                command.Name,
                command.Description,
                command.IncomingStatusId,
                command.OutgoingStatusId);

            await transactionRepository.CreateAsync(application);
        }
        public async Task Handle_WrongUser_ShouldThrowNotFoundException()
        {
            var projectId = await CreateFinancialProject();

            var transaction = new CreateTransactionCommand
            {
                FinancialProjectId = projectId,
                Amount             = 100,
                ToUserId           = SecondUser.Id,
                TransactionType    = TransactionType.FinancialReceipts
            };

            var id = await SendAsync(transaction);

            var deleteTransaction = new DeleteTransactionCommand
            {
                Id = id
            };

            await RunAsUserAsync("*****@*****.**", "nah");

            FluentActions.Invoking(async() => await SendAsync(deleteTransaction)).Should().Throw <NotFoundException>();
        }
        public async Task CreateTransaction_Tests(decimal amount, string type)
        {
            var command = new CreateTransactionCommand()
            {
                AccountId = 1, Amount = amount, Type = type
            };
            var options = new DbContextOptionsBuilder <BankAppDataContext>()
                          .UseInMemoryDatabase(databaseName: "CreateTransaction_Tests")
                          .Options;

            using (var context = new BankAppDataContext(options))
            {
                context.Accounts.Add(new Account()
                {
                    AccountId = 1, Balance = 1000
                });

                var handler = new CreateTransactionCommandHandler(context);

                var result = await handler.Handle(command, CancellationToken.None);

                Assert.False(result.Success);
            }
        }