public async Task <ResultType> AddTransaction(AddTransactionRequestModel model)
        {
            var user = await _db.Users.Include(x => x.Transactions).Include(c => c.Account).FirstOrDefaultAsync(u => u.Id == model.UserID);

            if (user == null)
            {
                return(ResultType.Fail);
            }

            if (model.Amount < 0 && user.Account.Balance + model.Amount < 0)
            {
                return(ResultType.Fail);
            }

            TransactionType tt = model.Amount < 0 ? tt = TransactionType.Debt : TransactionType.Income;

            TransactionModel transaction = new TransactionModel()
            {
                UserID = model.UserID,
                Time   = model.Time,
                Amount = model.Amount,
                Notes  = model.Notes,
                Type   = tt
            };

            user.Transactions.Add(transaction);


            if (tt == TransactionType.Debt)
            {
                user.Account.Credit += (model.Amount * -1);
            }
            else
            {
                user.Account.Debet += model.Amount;
            }


            user.Account.Balance += model.Amount;

            await _db.SaveChangesAsync();

            return(ResultType.Success);
        }
Esempio n. 2
0
        public void IsAddTr()
        {
            var opt     = new DbContextOptionsBuilder <DatabaseContext>().UseInMemoryDatabase(databaseName: "AddTr").Options;
            var context = new DatabaseContext(opt);

            var serivce = new AccountService(context);

            AddTransactionRequestModel model = new AddTransactionRequestModel
            {
                UserID = 1,
                Time   = DateTime.Parse("20.02.2020"),
                Amount = 2000,
                Notes  = "String"
            };

            var res = serivce.AddTransaction(model);

            Assert.Equal(ResultType.Success, res.Result);
        }
Esempio n. 3
0
 public async Task <ResultType> Put([FromBody] AddTransactionRequestModel model)
 {
     return(await _accountService.AddTransaction(model));
 }