public HttpResponseMessage PostReserve(string isbn) { #region Kontrol if (String.IsNullOrEmpty(isbn)) { return(Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "Hatalı istek!" })); } isbn = isbn.Trim(); var book = bookService.GetBook(isbn); var bookIds = bookIdService.GetBookIdForReserve(isbn); //Olmayan kitabı vermeyelim if (book == null || bookIds == null) { return(Request.CreateResponse(HttpStatusCode.NotFound, new { message = "Bu kitaptan kütüphanede bulunamadı!" })); } if (book.BookIds.Count(e => e.BookStatus == BookStatus.Available) == 0) { return(Request.CreateResponse(HttpStatusCode.NotFound, new { message = "Bu kitabın tüm kopyaları kirada!" })); } var userId = User.Identity.GetUserId(); // Kullanıcı kaç tane kiralık kitaba ve hangi kitaplara sahip. var reservedBooks = reserveService.GetBooksUserStillHave(userId); //Aynı kitabı iki kere vermeyelim var userReservedThisBook = reservedBooks.Any(e => e.BookIds.Isbn == isbn); if (userReservedThisBook) { return(Request.CreateResponse(HttpStatusCode.Forbidden, new { message = "Bu kitap elinizde olduğu için tekrar kiralayamazsınız!" })); } #endregion //Aynı anda 3 ten fazla kitap kiralayamasın. if (reservedBooks.Count() < 3) { bookIds.BookStatus = BookStatus.Reserved; bookIdService.UpdateBookId(bookIds); var reserve = Factory.GetReserveInstace(userId, bookIds); reserveService.AddReserve((Reserve)reserve); try { reserveService.SaveChanges(); var viewModel = Mapper.Map <Reserve, ReserveViewModel>((Reserve)reserve); return(Request.CreateResponse <IReserveViewModel>(System.Net.HttpStatusCode.Created, viewModel)); } catch (Exception ex) { if (ex.InnerException != null) { return(Request.CreateResponse(HttpStatusCode.BadRequest, new { exeption = ex.Message, innerException = ex.InnerException.Message })); } else { return(Request.CreateResponse(HttpStatusCode.BadRequest, new { exeption = ex.Message })); } } } return(Request.CreateResponse(HttpStatusCode.Forbidden, new { message = "Aynı anda sadece 3 kitap kiralayabilirsiniz!" })); }