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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }
예제 #7
0
        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));
        }
예제 #10
0
        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));
        }