public IActionResult DeleteBookForAuthor(Guid authorId, Guid id) { if (LibraryRepository.AuthorNotExists(authorId)) { return(NotFound()); } var book = LibraryRepository.GetBookForAuthor(authorId, id); if (book == null) { return(NotFound()); } LibraryRepository.DeleteBook(book); if (LibraryRepository.NotSave()) { throw new Exception($"Deleting book {id} for author {authorId} failed on save."); } Logger.LogInformation(100, $"Book {id} for author {authorId} was deleted."); return(NoContent()); }
public IActionResult UpdateBookForAuthor(Guid authorId, Guid id, [FromBody] BookForUpdateDto book) { if (book == null) { return(BadRequest()); } if (book.Title == book.Description) { ModelState.AddModelError(nameof(BookForUpdateDto), "O título e descrição devem ser diferentes."); } if (!ModelState.IsValid) { return(new UnprocessableEntityObjectResult(ModelState)); } if (LibraryRepository.AuthorNotExists(authorId)) { return(NotFound()); } var bookForAuthorFromRepository = LibraryRepository.GetBookForAuthor(authorId, id); if (bookForAuthorFromRepository == null) { var bookToAdd = Mapper.Map <Book>(book); bookToAdd.Id = id; LibraryRepository.AddBookForAuthor(authorId, bookToAdd); if (LibraryRepository.NotSave()) { throw new Exception($"Upserting book {id} for author {authorId} failed on save."); } var bookToReturn = Mapper.Map <BookDto>(bookToAdd); return(CreatedAtRoute("GetBookForAuthor", new { authorId, bookId = bookToReturn.Id }, bookToReturn)); } Mapper.Map(book, bookForAuthorFromRepository); LibraryRepository.UpdateBookForAuthor(bookForAuthorFromRepository); if (LibraryRepository.NotSave()) { throw new Exception($"Updating book {id} for author {authorId} failed on save."); } return(NoContent()); }
public IActionResult PartiallyUpdateBookForAuthor(Guid authorId, Guid id, [FromBody] JsonPatchDocument <BookForUpdateDto> patchDocument) { if (patchDocument == null) { return(BadRequest()); } if (LibraryRepository.AuthorNotExists(authorId)) { return(NotFound()); } var bookForAuthorFromRepo = LibraryRepository.GetBookForAuthor(authorId, id); if (bookForAuthorFromRepo == null) { var bookDto = new BookForUpdateDto(); patchDocument.ApplyTo(bookDto, ModelState); if (bookDto.Title == bookDto.Description) { ModelState.AddModelError(nameof(BookForUpdateDto), "The provided description should be different from the title."); } TryValidateModel(bookDto); if (!ModelState.IsValid) { return(new UnprocessableEntityObjectResult(ModelState)); } var bookToAdd = Mapper.Map <Book>(bookDto); bookToAdd.Id = id; LibraryRepository.AddBookForAuthor(authorId, bookToAdd); if (LibraryRepository.NotSave()) { throw new Exception($"Upserting book {id} for author {authorId} failed on save."); } var bookToReturn = Mapper.Map <BookDto>(bookToAdd); return(CreatedAtRoute("GetBookForAuthor", new { authorId, bookId = bookToReturn.Id }, bookToReturn)); } var bookToPatch = Mapper.Map <BookForUpdateDto>(bookForAuthorFromRepo); //patchDocument.ApplyTo(bookToPatch, ModelState); patchDocument.ApplyTo(bookToPatch); if (bookToPatch.Title == bookToPatch.Description) { ModelState.AddModelError(nameof(BookForUpdateDto), "The provided description should be different from the title."); } TryValidateModel(bookToPatch); if (!ModelState.IsValid) { return(new UnprocessableEntityObjectResult(ModelState)); } Mapper.Map(bookToPatch, bookForAuthorFromRepo); LibraryRepository.UpdateBookForAuthor(bookForAuthorFromRepo); if (LibraryRepository.NotSave()) { throw new Exception($"Patching book {id} for author {authorId} failed on save."); } return(NoContent()); }