Beispiel #1
0
        private async Task <bool> ValidateInput(Transaction transaction)
        {
            if (transaction.WalletName == null)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.WalletName), ErrorCode.WalletNameInvalid);
                return(false);
            }
            if (transaction.CategoryName == null)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.CategoryName), ErrorCode.CategoryNameInvalid);
                return(false);
            }
            if (transaction.Amount.ToString() == null)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.Amount), ErrorCode.AmountEmpty);
                return(false);
            }
            if (transaction.Amount <= 0)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.Amount), ErrorCode.AmountInvalid);
                return(false);
            }
            if (transaction.Date == null)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.Date), ErrorCode.DateInvalid);
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        public async Task <Transaction> Update(Transaction transaction)
        {
            if (transaction == null)
            {
                return(null);
            }
            if (!await TransactionValidator.Update(transaction))
            {
                return(transaction);
            }

            using (UnitOfWork.Begin())
            {
                try
                {
                    await UnitOfWork.TransactionRepository.Update(transaction);

                    await UnitOfWork.Commit();

                    return(await this.UnitOfWork.TransactionRepository.Get(transaction.Id));
                }
                catch (Exception ex)
                {
                    await UnitOfWork.Rollback();

                    transaction.AddError(nameof(TransactionService), nameof(transaction.Id), CommonEnum.ErrorCode.SystemError);
                    return(transaction);
                }
            }
        }
Beispiel #3
0
        public async Task <Transaction> Delete(Transaction transaction)
        {
            if (!await TransactionValidator.Delete(transaction))
            {
                return(transaction);
            }

            using (UnitOfWork.Begin())
            {
                try
                {
                    //var transactionB = await UnitOfWork.TransactionRepository.Get(transaction.Id);
                    await UnitOfWork.TransactionRepository.Delete(transaction);

                    await UnitOfWork.Commit();
                }
                catch (Exception ex)
                {
                    await UnitOfWork.Rollback();

                    transaction.AddError(nameof(TransactionService), nameof(Transaction.Id), CommonEnum.ErrorCode.SystemError);
                }
            }
            return(transaction);
        }
Beispiel #4
0
        public async Task <Transaction> Create(Transaction transaction)
        {
            if (!await TransactionValidator.Create(transaction))
            {
                return(transaction);
            }

            using (UnitOfWork.Begin())
            {
                try
                {
                    CategoryFilter categoryFilter = new CategoryFilter
                    {
                        Name = new StringFilter {
                            Equal = transaction.CategoryName
                        }
                    };
                    Category category = await UnitOfWork.CategoryRepository.Get(categoryFilter);

                    WalletFilter walletFilter = new WalletFilter
                    {
                        Name = new StringFilter {
                            Equal = transaction.WalletName
                        },
                        UserId = new GuidFilter {
                            Equal = transaction.UserId
                        }
                    };
                    Wallet wallet = await UnitOfWork.WalletRepository.Get(walletFilter);


                    transaction.Id         = Guid.NewGuid();
                    transaction.WalletId   = wallet.Id;
                    transaction.CategoryId = category.Id;
                    if (category.Type == CategoryType.Inflow)
                    {
                        wallet.Balance += transaction.Amount;
                    }
                    else
                    {
                        wallet.Balance -= transaction.Amount;
                    }

                    await UnitOfWork.WalletRepository.Update(wallet);

                    await UnitOfWork.TransactionRepository.Create(transaction);

                    await UnitOfWork.Commit();
                }
                catch (Exception ex)
                {
                    await UnitOfWork.Rollback();

                    transaction.AddError(nameof(TransactionService), nameof(Transaction.Id), CommonEnum.ErrorCode.SystemError);
                }
            }
            return(transaction);
        }
Beispiel #5
0
        private async Task <bool> ValidateId(Transaction transaction)
        {
            TransactionFilter transactionFilter = new TransactionFilter
            {
                Skip = 0,
                Take = int.MaxValue,
                Id   = new GuidFilter {
                    Equal = transaction.Id
                },
                OrderBy   = TransactionOrder.Id,
                OrderType = OrderType.ASC
            };

            int count = await unitOfWork.TransactionRepository.Count(transactionFilter);

            if (count == 0)
            {
                transaction.AddError(nameof(TransactionValidator), nameof(transaction.Id), ErrorCode.IdNotFound);
            }

            return(count == 1);
        }