Exemplo n.º 1
0
        public IActionResult PartiallyUpdateBook(Guid authorId, Guid id, [FromBody] JsonPatchDocument <BookForUpdateDTO> doc)
        {
            if (doc == null)
            {
                return(BadRequest());
            }

            if (!libRepo.AuthorExists(authorId))
            {
                return(NotFound());
            }

            var bookForAuthorFromRepo = libRepo.GetBookForAuthor(authorId, id);

            if (bookForAuthorFromRepo == null)
            {
                var bookDto = new BookForUpdateDTO();
                doc.ApplyTo(bookDto, ModelState);
                TryValidateModel(bookDto);

                if (!ModelState.IsValid)
                {
                    return(new UnprocessableEntityObjectResult(ModelState));
                }
                var newBook = Mapper.Map <Book>(bookDto);
                newBook.Id = id;
                libRepo.AddBookForAuthor(authorId, newBook);

                if (!libRepo.Save())
                {
                    throw new Exception($"Updating book {id} for author {authorId} failed on save.");
                }

                var bookToReturn = Mapper.Map <BookDTO>(newBook);

                return(CreatedAtRoute("GetBook",
                                      new { authorId = authorId, id = bookToReturn.Id },
                                      bookToReturn));
            }

            var bookToUpdate = Mapper.Map <BookForUpdateDTO>(bookForAuthorFromRepo);

            doc.ApplyTo(bookToUpdate, ModelState);

            TryValidateModel(bookToUpdate);
            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }
            Mapper.Map(bookToUpdate, bookForAuthorFromRepo);
            libRepo.UpdateBookForAuthor(bookForAuthorFromRepo);
            if (!libRepo.Save())
            {
                throw new Exception($"Partially updating book {id} for author {authorId} failed on save.");
            }

            return(NoContent());
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Put(int authorId, int id, [FromBody] BookForUpdateDTO value)
        {
            if (!bookValidationStrategy.IsValid(value))
            {
                return(new UnprocessableEntityObjectResult(bookValidationStrategy.GetValidationResults(value)));
            }

            var updatedBook = await updateBookStrategy.UpdateBook(authorId, id, value);

            return(Ok(updatedBook));
        }
Exemplo n.º 3
0
        public IActionResult UpdateBook(Guid authorId, Guid id, [FromBody] BookForUpdateDTO book)
        {
            if (book == null)
            {
                return(BadRequest());
            }
            if (!libRepo.AuthorExists(authorId))
            {
                return(NotFound());
            }

            if (book.Description == book.Title)
            {
                ModelState.AddModelError(nameof(BookForUpdateDTO),
                                         "The provided description should be different from the title.");
            }

            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            var oldBook = libRepo.GetBookForAuthor(authorId, id);

            if (oldBook == null)
            {
                var newBook = Mapper.Map <Book>(book);
                newBook.Id = id;

                libRepo.AddBookForAuthor(authorId, newBook);

                if (!libRepo.Save())
                {
                    throw new Exception($"Updating book {id} for author {authorId} failed on save.");
                }

                var bookToReturn = Mapper.Map <BookDTO>(newBook);

                return(CreatedAtRoute("GetBook",
                                      new { authorId = authorId, id = bookToReturn.Id },
                                      bookToReturn));
            }

            Mapper.Map(book, oldBook);
            libRepo.UpdateBookForAuthor(oldBook);

            if (!libRepo.Save())
            {
                throw new Exception($"Updating book {id} for author {authorId} failed on save.");
            }

            return(NoContent());
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Put(int id, BookForUpdateDTO bookForUpdateDTO)
        {
            var bookFromRepo = await _repo.GetAsync(id);

            _mapper.Map(bookForUpdateDTO, bookFromRepo);

            if (await _repo.SaveAsync() > 0)
            {
                return(NoContent());
            }

            throw new Exception($"Updating book with id: {id} failed on save.");
        }
Exemplo n.º 5
0
        public async Task <BookDTO> UpdateBook(int authorId, int bookId, BookForUpdateDTO value)
        {
            if (await authorsRepository.Exists(authorId))
            {
                throw new NotFoundException("Author", authorId);
            }

            var bookToUpdate = await booksRepository.GetById(bookId);

            if (bookToUpdate == null)
            {
                throw new NotFoundException("Book", bookId);
            }
            mapper.Map(value, bookToUpdate);
            await booksRepository.Update(bookId, bookToUpdate);

            return(createLinksStrategy.CreateLinksForBookResource(mapper.Map <BookDTO>(bookToUpdate)));
        }