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()); }
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)); }
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()); }
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."); }
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))); }