public async Task <IActionResult> Post(DebtPaymentViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Check the debt
                var debt = await _db.Debts.FindAsync(model.DebtId);

                if (debt == null)
                {
                    return(NotFound());
                }

                // Check the total of the debt
                var totalPayments = _db.DebtPayment.Where(d => d.DebtId == model.DebtId).Sum(d => d.Amount);
                if ((totalPayments + model.Amount) > debt.Amount)
                {
                    return(BadRequest(new
                    {
                        Message = $"Total amount of the debt is {debt.Amount} and with the current payment the total will be higher than the debt amount",
                        IsSuccess = false
                    }));
                }

                var debtPayment = await _db.DebtPayment.AddAsync(new DebtPayment
                {
                    Amount      = model.Amount,
                    CreatedDate = DateTime.UtcNow,
                    DebtId      = model.DebtId,
                    PaymentDate = model.PaymentDate.ToUniversalTime(),
                    Id          = Guid.NewGuid().ToString()
                });

                if ((model.Amount + totalPayments) == debt.Amount)
                {
                    debt.IsPaid = true;
                }

                await _db.SaveChangesAsync();

                debtPayment.Entity.Debt = null;

                return(Ok(new HttpSingleResponse <DebtPayment>
                {
                    Message = "Debt payment added successfully",
                    IsSuccess = true,
                    Value = debtPayment.Entity
                }));
            }

            return(BadRequest(new
            {
                Message = "Some properties are not valid",
                IsSuccess = false
            }));
        }
        public async Task <IActionResult> Put(DebtPaymentViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Get the debt
                var debt = await _db.Debts.FindAsync(model.DebtId);

                if (debt == null)
                {
                    return(NotFound());
                }

                // Check the total of the debt
                var totalPayments = _db.DebtPayment.Where(d => d.DebtId == model.DebtId && d.Id != model.Id).Sum(d => d.Amount);
                if ((totalPayments + model.Amount) > debt.Amount)
                {
                    return(BadRequest(new
                    {
                        Message = $"Total amount of the debt is {debt.Amount} and with the current payment the total will be higher than the debt amount",
                        IsSuccess = false
                    }));
                }

                var payment = await _db.DebtPayment.FindAsync(model.Id);

                if (payment == null)
                {
                    return(NotFound());
                }

                if ((payment.Amount + totalPayments) == debt.Amount)
                {
                    debt.IsPaid = true;
                }

                // update the property
                payment.Amount      = model.Amount;
                payment.PaymentDate = model.PaymentDate.ToUniversalTime();

                await _db.SaveChangesAsync();

                return(Ok(new HttpSingleResponse <DebtPayment>
                {
                    IsSuccess = true,
                    Message = "Debt payment edited",
                    Value = payment
                }));
            }

            return(BadRequest(new
            {
                Message = "Some properties are not valid",
                IsSuccess = false
            }));
        }