public async Task <IHttpActionResult> CreateNewExpenseRecord(long userId, ExpenseForCreateDto expenseForCreateDto)
        {
            if (!IsUserAuthorized(userId))
            {
                return(Unauthorized());
            }

            var bankAccountId = expenseForCreateDto.BankAccountId;
            var userFromDb    = await _unitOfWork.Users.GetUserData(userId);

            if (!userFromDb.BankAccounts.Any(b => b.Id == bankAccountId))
            {
                return(BadRequest("Current User doesn't own this account!"));
            }

            var expenseForDb = _unitOfWork.Expenses.SubtractMoneyFromBankAccount(userId, userFromDb, expenseForCreateDto, _mapper);

            if (await _unitOfWork.Complete() > 0)
            {
                var expensesList = _mapper.Map <ExpensesForListDto>(expenseForDb);

                return(Created(new Uri(Request.RequestUri + "/" + expenseForDb.Id), expensesList));
            }

            return(BadRequest("An error happened while creating new expense!"));
        }
Example #2
0
        public async Task <IActionResult> CreateExpense([FromBody] ExpenseForCreateDto expenseForCreateDto)
        {
            var userId = HttpContext.GetUserIdFromToken();

            var expense = _mapper.Map <Expense>(expenseForCreateDto);

            expense.OwnerId = int.Parse(userId);

            await _repository.Add(expense);

            await _repository.SaveChangesAsync();

            var expenseDto = _mapper.Map <ExpenseDto>(expense);

            return(CreatedAtAction(nameof(GetExpense), new { id = expenseDto.Id }, expenseDto));
        }
        public Expense SubtractMoneyFromBankAccount(long userId, User userFromDb, ExpenseForCreateDto expenseForCreateDto, IMapper mapper)
        {
            var bankAccountId       = expenseForCreateDto.BankAccountId;
            var bankAccountToUpdate = userFromDb.BankAccounts.FirstOrDefault(b => b.Id == bankAccountId);

            bankAccountToUpdate.Ballance -= expenseForCreateDto.Ammount;

            expenseForCreateDto.UserId = userId;

            var expenseForDb = mapper.Map <Expense>(expenseForCreateDto);

            expenseForDb.NewBallance = bankAccountToUpdate.Ballance;

            Add(expenseForDb);

            return(expenseForDb);
        }