public IActionResult CreateBookForAuthor(Guid authorId, [FromBody] BookCreationDto book) { if (book == null) { return(BadRequest()); } if (book.Description == book.Title) { ModelState.AddModelError(nameof(BookCreationDto), "The provided desciption should be different from the title"); } if (!ModelState.IsValid) { return(new UnprocessableEntityObjectResult(ModelState)); } if (!_libraryRepository.AuthorExists(authorId)) { return(NotFound()); } var bookEntity = Mapper.Map <Book>(book); _libraryRepository.AddBookForAuthor(authorId, bookEntity); if (!_libraryRepository.Save()) { throw new BadImageFormatException($"Creating a book for {authorId} failed on save"); } var bookToReturn = Mapper.Map <BookDto>(bookEntity); return(CreatedAtRoute("GetBookForAuthor", new { authorId, id = bookToReturn.Id }, CreateLinksForBook(bookToReturn))); }
public IActionResult CreateBookForAuthor(Guid authorId, [FromBody] BookCreationDto book) { if (book == null) { return(BadRequest()); } if (!_libraryRepository.AuthorExists(authorId)) { return(NotFound()); } var bookEntity = Mapper.Map <Book>(book); _libraryRepository.AddBookForAuthor(authorId, bookEntity); if (!_libraryRepository.Save()) { throw new Exception($"La creación de libro para el autor : {authorId} no pude efectuarse."); } var bookToReturn = Mapper.Map <BookDto>(bookEntity); return(CreatedAtRoute("GetBookForAuthor", new { authorId = authorId, id = bookToReturn.Id }, bookToReturn)); }
public IActionResult CreateBookForAuthor(Guid authorID, [FromBody] BookCreationDto book) { if (book == null) { return(BadRequest()); } if (!libraryRepository.AuthorExists(authorID)) { return(NotFound()); } var bookEntity = Mapper.Map <Book>(book); libraryRepository.AddBookForAuthor(authorID, bookEntity); if (!libraryRepository.Save()) { throw new Exception("Error !!!"); } var bookDto = Mapper.Map <BookDto>(bookEntity); // below line of code provide location URL in response body for newly created resource return(CreatedAtRoute("GetBookForAuthor", new { authorID = authorID, bookID = bookDto.Id }, bookDto)); }
public async Task <IActionResult> CreateBook(BookCreationDto bookToCreate) { var newBook = _mapper.Map <Book>(bookToCreate); _bookRepository.AddBook(newBook); await _bookRepository.SaveChangesAsync(); // Fetch(refetch) the book from the data store, including the author. await _bookRepository.GetBookAsync(newBook.Id); return(CreatedAtRoute("GetBook", new { id = newBook.Id }, newBook)); }
public ActionResult <BookDto> CreateBookForAuthor(Guid authorId, BookCreationDto book) { if (!_libraryRepository.AuthorExists(authorId)) { return(NotFound()); } var bookEntity = _mapper.Map <Book>(book); _libraryRepository.AddBook(authorId, bookEntity); _libraryRepository.Save(); var bookToReturn = _mapper.Map <BookDto>(bookEntity); return(CreatedAtAction("GetBookForAuthor", new { authorId = authorId, bookId = bookToReturn.Id }, bookToReturn)); }
public async Task <BookDto> CreateBookAsync(BookCreationDto bookCreationDto) { ValidateEntity(bookCreationDto); ValidateId(bookCreationDto.AuthorId); var authorExists = await _authorRepository.Exists(bookCreationDto.AuthorId); if (!authorExists) { throw new AuthorNotFoundException(bookCreationDto.AuthorId); } var book = _mapper.Map <Book>(bookCreationDto); await _bookRepository.CreateBookAsync(book); return(_mapper.Map <BookDto>(book)); }
public async Task <ActionResult <BookDto> > PostBook(BookCreationDto bookDto) { if (bookDto == null) { return(BadRequest("Invalid book details provided.")); } if (!ModelState.IsValid) { return(BadRequest(new { Book = ModelState, Message = "Incomplete book details." })); } var id = await _bookService.CreateAsync(_mapper.Map <Book>(bookDto)); var book = await _bookService.GetById(id); return(CreatedAtAction("GetBook", new { id = book.Id }, _mapper.Map <GetBookWithAuthorDto>(book))); }
public async Task <IActionResult> CreateBook([FromBody] BookCreationDto book) { if (book == null) { return(BadRequest()); } if (book.AuthorId == Guid.Empty) { return(BadRequest("Invalid author identifier")); } if (!ModelState.IsValid) { LogModelStateErrors(_logger); return(ValidationProblem(ModelState)); } try { var bookDto = await _bookService.CreateBookAsync(book); return(CreatedAtAction( "GetBook", new { id = bookDto.Id }, bookDto)); } catch (AuthorNotFoundException exception) { _logger.LogError($"Error occurred: {exception.GetMessageWithStackTrace()}"); return(NotFound($"Author with id:{book.AuthorId} not found.")); } catch (Exception exception) { _logger.LogError($"Error occurred: {exception.GetMessageWithStackTrace()}"); return(InternalServerErrorResult("Error occurred retrieving books.")); } }
public IActionResult CreateBookForAuthor(Guid authorId, [FromBody] BookCreationDto book) { if (book == null) { return(BadRequest()); } //TODO : 06 - Creo regla de negocio if (book.Description == book.Title) { ModelState.AddModelError(nameof(BookCreationDto), "El titulo debe de ser distinto a la descripción."); } if (!ModelState.IsValid) { //TODO : 04 - Valido el modelo return(new UnprocessableEntityObjectResult(ModelState)); } if (!_libraryRepository.AuthorExists(authorId)) { return(NotFound()); } var bookEntity = Mapper.Map <Book>(book); _libraryRepository.AddBookForAuthor(authorId, bookEntity); if (!_libraryRepository.Save()) { throw new Exception($"La creación de libro para el autor : {authorId} no pude efectuarse."); } var bookToReturn = Mapper.Map <BookDto>(bookEntity); return(CreatedAtRoute("GetBookForAuthor", new { authorId = authorId, id = bookToReturn.Id }, bookToReturn)); }
public IActionResult CreateBook(Guid AuthorId, [FromBody] BookCreationDto book) { if (!_Repo.AuthorExists(AuthorId)) { return(NotFound()); } if (book == null) { return(BadRequest()); } if (book.Title == book.Description) { ModelState.AddModelError(nameof(BookCreationDto), "the title and desc cannot be the same"); } if (!ModelState.IsValid) { return(new UnProccessableObjectResult(ModelState)); } var booktoSave = Mapper.Map <Book>(book); _Repo.AddBookForAuthor(AuthorId, booktoSave); if (!_Repo.Save()) { throw new Exception("something go wron to the server"); } var bookToResponse = Mapper.Map <BookToReturn>(booktoSave); return(CreatedAtRoute("Book", new { authorId = bookToResponse.AuthorId, bookId = bookToResponse.Id }, bookToResponse)); }