public async Task <HttpResponseMessage> Get(int id = -1)
        {
            if (id != -1)
            {
                Payment res = await _db.Payments.Where(b => b.Id == id && !b.Deleted).FirstOrDefaultAsync();

                if (res == null)
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NoContent, "No Payment Found With ID"));
                }

                LibBookingService.Dtos.Payment payment = CreatePaymentFromDbPayment(res);

                return(Request.CreateResponse(HttpStatusCode.OK, payment));
            }
            else
            {
                IEnumerable <Payment> res = await _db.Payments.Where(b => b.Deleted != true).ToListAsync();

                IEnumerable <LibBookingService.Dtos.Payment> payments = res.Select(b => CreatePaymentFromDbPayment(b));

                return(payments.Any() ?
                       Request.CreateResponse(HttpStatusCode.OK, payments) :
                       Request.CreateErrorResponse(HttpStatusCode.NoContent, "No Payments"));
            }
        }
        public async Task <HttpResponseMessage> Post(LibBookingService.Dtos.Payment payment)
        {
            try
            {
                Payment newPayment = _db.Payments.Add(new Payment
                {
                    Booking_id       = payment.BookingId,
                    Customer_id      = payment.CustomerId,
                    PaymentMethod_id = payment.PaymentMethod.Id,
                    Amount           = payment.Amount,
                    Comments         = payment.Comments
                });
                await _db.SaveChangesAsync();

                if (!isTesting)
                {
                    _db.Entry(newPayment).Reload();
                }

                return(Request.CreateResponse(HttpStatusCode.OK, CreatePaymentFromDbPayment(newPayment)));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed"));
            }
        }
        public async Task <HttpResponseMessage> Update(int id, LibBookingService.Dtos.Payment payment)
        {
            try
            {
                Payment p = await _db.Payments.Where(bb => bb.Id == id).FirstOrDefaultAsync();

                p.Amount           = payment.Amount;
                p.Comments         = payment.Comments;
                p.PaymentMethod_id = payment.PaymentMethod.Id;

                _db.SetModified(p);
                await _db.SaveChangesAsync();

                LibBookingService.Dtos.Payment res = CreatePaymentFromDbPayment(p);

                return(Request.CreateResponse(HttpStatusCode.OK, res));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed"));
            }
        }