public async Task <IActionResult> PutExpense([FromRoute] long id, [FromBody] ExpenseAddOrChangeRequest request)
        {
            if (!ModelState.IsValid || !TryValidateModel(request))
            {
                return(BadRequest(ModelState.Values.SelectMany(m => m.Errors)));
            }

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

            var currentExpense = await _repo.GetByIdWithoutTrackingAsync(id);

            if (currentExpense is null)
            {
                return(NotFound());
            }

            if (currentExpense.OwnerId != getCurrentUserId())
            {
                return(Unauthorized());
            }

            expense.ExpenseId = id;

            var updateSucceed = await _repo.UpdateAsync(expense);

            if (!updateSucceed)
            {
                return(NotFound());
            }

            return(Ok(request));
        }
        public async Task <IActionResult> PostExpense([FromBody] ExpenseAddOrChangeRequest request)
        {
            if (!ModelState.IsValid || !TryValidateModel(request))
            {
                return(BadRequest(ModelState.Values.SelectMany(m => m.Errors)));
            }

            if (request.OwnerId != getCurrentUserId())
            {
                return(Unauthorized());
            }

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

            await _repo.AddAsync(expense);

            return(CreatedAtAction("GetExpense", new { id = expense.ExpenseId }, request));
        }