private bool ValidateDto(CreateTransactionDto dto)
        {
            Guard.Against.Null(dto, "Transaction");
            Guard.Against.Negative(dto.Amount, "Amount");
            Guard.Against.Zero((int)dto.Type, "");

            switch (dto.Type)
            {
            case TransactionType.Deposit:
                Guard.Against.Zero(dto.ToAccountId, "");
                break;

            case TransactionType.Withdraw:
                Guard.Against.Zero(dto.FromAccountId, "");
                break;

            case TransactionType.Transfer:
                Guard.Against.Zero(dto.ToAccountId, "");
                Guard.Against.Zero(dto.FromAccountId, "");
                break;

            default:
                return(false);
            }
            ;

            return(true);
        }
Ejemplo n.º 2
0
        public async Task CreateTransactionAsync(string payeeEmail, CreateTransactionDto createTransactionDto)
        {
            var payee = await _userRepository.GetByEmailAsync(payeeEmail);

            var recipient = await _userRepository.GetByNameAsync(createTransactionDto.Recipient);

            ValidateCreation(payee, recipient, createTransactionDto.Amount, createTransactionDto.Recipient);

            payee.Balance     -= createTransactionDto.Amount;
            recipient.Balance += createTransactionDto.Amount;

            var transaction = new PwTransaction
            {
                Payee                     = payee,
                Recipient                 = recipient,
                ResultingPayeeBalance     = payee.Balance,
                ResultingRecipientBalance = recipient.Balance,
                Amount                    = createTransactionDto.Amount,
                TransactionDateTime       = DateTime.Now
            };

            await _transactionRepository.AddAsync(transaction);

            await _balanceHubContext.Clients.Group(recipient.Email).UpdateBalance(recipient.Balance);
        }
        public ActionResult <TransactionDto> CreateTransaction(CreateTransactionDto transactionDto)
        {
            Transaction transaction = new()
            {
                senderAccountNumber   = transactionDto.senderAccountNumber,
                receiverAccountNumber = transactionDto.receiverAccountNumber,
                amount = transactionDto.amount
            };

            var senderAccount   = _accRepo.GetAccountById(transaction.senderAccountNumber);
            var receiverAccount = _accRepo.GetAccountById(transaction.receiverAccountNumber);

            var checkResult = CheckTransactionRestrictions(senderAccount, receiverAccount, transaction);

            if (checkResult != "satisfy")
            {
                return new ObjectResult(checkResult)
                       {
                           StatusCode = 400
                       }
            }
            ;

            // All Conditions Satisfies
            _transRepo.CreateTransaction(transaction);
            UpdateAccountsBalance(senderAccount, receiverAccount, transaction.amount, this._accRepo);

            return(Ok());
        }
Ejemplo n.º 4
0
        public async Task <GetTransactionDto> CreateTransactionAsync(CreateTransactionDto transactionDto)
        {
            var transaction = _mapper.Map <Transaction>(transactionDto);

            transaction.CreatedAt = DateTime.Now;
            transaction           = await _transaction.AddTransactionAsync(transaction);

            return(_mapper.Map <GetTransactionDto>(transaction));
        }
Ejemplo n.º 5
0
        public async Task Execute(CreateTransactionDto createDto)
        {
            var account = await accountsGetDbOperations.Get(createDto.AccountId);

            var transaction = new Transaction(null, account, createDto.DateTime, createDto.Debit, createDto.Credit, createDto.Reason);
            await transactionsWriteDbOperations.Create(transaction);

            await accountsWriteDbOperations.SetBalance(account.Id, account.Balance + createDto.Debit + createDto.Credit);
        }
 public ActionResult <TransactionDetailDto> CreateTransaction(CreateTransactionDto dto)
 {
     try
     {
         Transaction transaction = _manager.CreateFromHttpPost(dto);
         return(_manager.AsTransactionDetailDto(transaction));
     }
     catch (Exception ex)
     {
         return(NotFound(ex.Message));
     }
 }
Ejemplo n.º 7
0
        public async Task <IActionResult> Post([FromBody] CreateTransactionDto dto)
        {
            if (ModelState.IsValid)
            {
                dto.TransactionOn = DateTimeOffset.UtcNow;
                var messageBody = JsonConvert.SerializeObject(dto);
                var message     = new Message(Encoding.UTF8.GetBytes(messageBody));
                await _queueClient.SendAsync(message);

                return(Accepted(dto));
            }

            return(BadRequest());
        }
Ejemplo n.º 8
0
        public CreateTransactionDtoValidatorFixture()
        {
            Validator = new CreateTransactionDtoValidator();

            Model = new CreateTransactionDto
            {
                TransactionTypeId = 2,
                PaymentTypeId     = 1,
                Date        = DateTime.Now.AddDays(-2),
                Description = "Interest from Deposit",
                Amount      = 456.5m,
                Cashflow    = "Income"
            };
        }
        public async Task <IActionResult> Post(CreateTransactionDto transaction)
        {
            var newTransaction = new TransactionModel
            {
                CategoryId = transaction.CategoryId,
                ProductId  = transaction.ProductId,
                Date       = transaction.Date,
                Notes      = transaction.Notes,
                Quantity   = transaction.Quantity,
            };
            await _transactionService.CreateAsync(newTransaction);

            return(Ok());
        }
        public Transaction CreateFromHttpPost(CreateTransactionDto dto)
        {
            if (!ValidateDto(dto))
            {
                return(null);
            }

            Transaction transaction = dto.Type switch
            {
                TransactionType.Deposit => CreateDeposit(dto.ToAccountId, dto.Amount),
                TransactionType.Withdraw => CreateWithdraw(dto.FromAccountId, dto.Amount),
                TransactionType.Transfer => CreateTransfer(dto.FromAccountId, dto.ToAccountId, dto.Amount),
                _ => null
            };

            return(transaction);
        }
Ejemplo n.º 11
0
        private bool ValidateDto(CreateTransactionDto dto)
        {
            if (dto.Type is 0)
            {
                return(false);
            }

            switch (dto.Type)
            {
            case TransactionType.Deposit:
                if (dto.ToAccountId is 0)
                {
                    return(false);
                }
                break;

            case TransactionType.Withdraw:
                if (dto.FromAccountId is 0)
                {
                    return(false);
                }
                break;

            case TransactionType.Transfer:
                if (dto.FromAccountId is 0 ||
                    dto.ToAccountId is 0
                    )
                {
                    return(false);
                }
                break;

            default:
                return(false);
            }

            if (dto.Amount <= 0)
            {
                return(false);
            }

            return(true);
        }
        public async Task CreateTransation(CreateTransactionDto input)
        {
            var tran = new Transaction();
            var car  = await _carRepository.GetAsync(input.CarId);

            tran.CarId   = input.CarId;
            tran.BuyDate = input.BuyDate;
            tran.Number  = input.Number;
            tran.Total   = input.Number * car.Price;
            if (input.Number <= car.Inventory)
            {
                car.Inventory -= input.Number;
                car.Total     += tran.Total;
            }
            else
            {
                throw new Exception("Input wrong");
            }
            await _transactionRepository.InsertAsync(tran);

            await _carRepository.UpdateAsync(car);

            await CurrentUnitOfWork.SaveChangesAsync();
        }
Ejemplo n.º 13
0
        public TransactionControllerFixture()
        {
            ApiVersion = new ApiVersion(1, 0);

            MockTransactionRepository = new Mock <ITransactionRepository>();

            var crearedAt = DateTime.Now.AddDays(-1);

            Transactions = new List <GetTransactionDto>
            {
                new GetTransactionDto {
                    Id = 1,
                    TransactionTypeId = 1,
                    TransactionType   = "Food",
                    PaymentTypeId     = 2,
                    PaymentType       = "Credit",
                    Date        = DateTime.Now.AddDays(-10),
                    Description = "Peanuts in Coke",
                    Amount      = 6.5m,
                    Cashflow    = "Expense",
                    CreatedAt   = crearedAt
                },
                new GetTransactionDto {
                    Id = 2,
                    TransactionTypeId = 2,
                    TransactionType   = "Extra Income",
                    PaymentTypeId     = 1,
                    PaymentType       = "Cash",
                    Date        = DateTime.Now.AddDays(-5),
                    Description = "Income from sale",
                    Amount      = 110.5m,
                    Cashflow    = "Income",
                    CreatedAt   = crearedAt
                }
            };

            ValidCreateTransactionDto = new CreateTransactionDto
            {
                TransactionTypeId = 2,
                PaymentTypeId     = 1,
                Date        = DateTime.Now.AddDays(-2),
                Description = "Interest from Deposit",
                Amount      = 456.5m,
                Cashflow    = "Income"
            };

            CreateTransactionDtoResult = new GetTransactionDto
            {
                Id = 3,
                TransactionTypeId = 2,
                TransactionType   = "Extra Income",
                PaymentTypeId     = 1,
                PaymentType       = "Cash",
                Date        = DateTime.Now.AddDays(-2),
                Description = "Interest from Deposit",
                Amount      = 456.5m,
                Cashflow    = "Income",
                CreatedAt   = DateTime.Now
            };

            ValidEditTransactionDto = new EditTransactionDto
            {
                TransactionTypeId = 2,
                PaymentTypeId     = 1,
                Date        = DateTime.Now.AddDays(-5),
                Description = "Income from sale",
                Amount      = 10110.5m,
                Cashflow    = "Income"
            };

            EditTransactionDtoResult = new GetTransactionDto
            {
                Id = 2,
                TransactionTypeId = 2,
                TransactionType   = "Extra Income",
                PaymentTypeId     = 1,
                PaymentType       = "Cash",
                Date        = DateTime.Now.AddDays(-5),
                Description = "Income from sale",
                Amount      = 10110.5m,
                Cashflow    = "Income",
                CreatedAt   = crearedAt
            };
        }
        public async Task <IActionResult> CreateTransaction(CreateTransactionDto transactionDto, ApiVersion version)
        {
            var result = await _repository.CreateTransactionAsync(transactionDto);

            return(CreatedAtRoute(new { id = result.Id, version = $"{version}" }, result));
        }
Ejemplo n.º 15
0
        public TransactionRepositoryFixture()
        {
            MockTransactionService = new Mock <ITransactionService>();
            var paymentTypeCash = new PaymentType {
                Id = 1, Name = "Cash", CreditPeriod = 0
            };
            var paymentTypeCredit = new PaymentType {
                Id = 2, Name = "Credit", CreditPeriod = 15
            };

            var transactionType1 = new TransactionType {
                Id = 1, Type = "Food"
            };
            var transactionType2 = new TransactionType {
                Id = 2, Type = "Extra Income"
            };

            Transactions = new List <Transaction> {
                new Transaction {
                    Id = 1,
                    TransactionTypeId = 1,
                    TransactionType   = transactionType1,
                    PaymentTypeId     = 2,
                    PaymentType       = paymentTypeCredit,
                    Date        = DateTime.Now.AddDays(-10),
                    Description = "Peanuts in Coke",
                    Amount      = 6.5m,
                    Cashflow    = Cashflow.Expense,
                    CreatedAt   = DateTime.Now
                },
                new Transaction {
                    Id = 2,
                    TransactionTypeId = 2,
                    TransactionType   = transactionType2,
                    PaymentTypeId     = 1,
                    PaymentType       = paymentTypeCash,
                    Date        = DateTime.Now.AddDays(-5),
                    Description = "Income from sale",
                    Amount      = 110.5m,
                    Cashflow    = Cashflow.Income,
                    CreatedAt   = DateTime.Now
                }
            };

            CreateTransactionDto = new CreateTransactionDto
            {
                TransactionTypeId = 2,
                PaymentTypeId     = 1,
                Date        = DateTime.Now.AddDays(-2),
                Description = "Interest from Deposit",
                Amount      = 456.5m,
                Cashflow    = "Income"
            };

            CreatedNewTransaction = new Transaction
            {
                Id = 3,
                TransactionTypeId = 2,
                TransactionType   = transactionType2,
                PaymentTypeId     = 1,
                PaymentType       = paymentTypeCash,
                Date        = DateTime.Now.AddDays(-2),
                Description = "Interest from Deposit",
                Amount      = 456.5m,
                Cashflow    = Cashflow.Income,
                CreatedAt   = DateTime.Now
            };

            EditTransactionDto = new EditTransactionDto
            {
                TransactionTypeId = 2,
                PaymentTypeId     = 1,
                Date        = DateTime.Now.AddDays(-5),
                Description = "Income from sale",
                Amount      = 10110.5m,
                Cashflow    = "Income"
            };
        }