Exemplo n.º 1
0
        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!" }));
        }