public async Task <IActionResult> Create([Bind("Id,Title,Description,ReleaseDate,Score,AuthorsIds,Authors")] BookAddDto book)
        {
            var authors = await _authorService.GetAll();

            ViewData["NoAuthors"] = false;
            if (authors.Count() < 1)
            {
                ViewData["NoAuthors"] = true;
            }

            if (!ModelState.IsValid)
            {
                ViewData["AuthorId"] = AuthorsSelectList(authors, book.AuthorsIds);
                return(View(book));
            }

            var sameBook = await _bookService.Get(book.Title, book.ReleaseDate);

            if (sameBook != null)
            {
                ModelState.AddModelError("", $"{book.Title} released {book.ReleaseDate:dd/MM/yyy} already exists");
                ViewData["AuthorId"] = AuthorsSelectList(authors, book.AuthorsIds);
                return(View(book));
            }

            await _bookService.Create(book);

            return(RedirectToAction(nameof(Index)));
        }
Example #2
0
        public ActionResult <BookReadDto> AddBook(BookAddDto bookAddDto)
        {
            var bookItem = _mapper.Map <Book>(bookAddDto);

            _bookRepo.CreateBook(bookItem);
            var bookDTO = _mapper.Map <BookReadDto>(bookItem);

            return(CreatedAtRoute(nameof(GetBookById), new { Id = bookDTO.Id }, bookDTO));
        }
Example #3
0
        public async void Add_ShouldReturnBadRequest_WhenModelStateIsInvalid()
        {
            var bookAddDto = new BookAddDto();

            _booksController.ModelState.AddModelError("Name", "The field name is required");

            var result = await _booksController.Add(bookAddDto);

            Assert.IsType <BadRequestResult>(result);
        }
        public ActionResult <BookDto> CreateBook([FromRoute] Guid authorId, [FromBody] BookAddDto bookAddDto)
        {
            if (!authorRepository.IsAuthorExist(authorId))
            {
                return(NotFound());
            }
            var bookEntity = mapper.Map <Book>(bookAddDto);

            bookEntity.AuthorId = authorId;
            var result = bookRepository.CreateBook(bookEntity);

            return(CreatedAtRoute(nameof(GetBook), new { authorId = authorId, bookId = result.Id }, result));
        }
Example #5
0
        public async void Add_ShouldCallAddFromService_OnlyOnce()
        {
            var book       = CreateBook();
            var bookAddDto = new BookAddDto()
            {
                Name = book.Name
            };

            _mapperMock.Setup(m => m.Map <Book>(It.IsAny <BookAddDto>())).Returns(book);
            _bookServiceMock.Setup(c => c.Add(book)).ReturnsAsync(book);

            await _booksController.Add(bookAddDto);

            _bookServiceMock.Verify(mock => mock.Add(book), Times.Once);
        }
Example #6
0
        public async void Add_ShouldReturnBadRequest_WhenBookResultIsNull()
        {
            var book       = CreateBook();
            var bookAddDto = new BookAddDto()
            {
                Name = book.Name
            };

            _mapperMock.Setup(m => m.Map <Book>(It.IsAny <BookAddDto>())).Returns(book);
            _bookServiceMock.Setup(c => c.Add(book)).ReturnsAsync((Book)null);

            var result = await _booksController.Add(bookAddDto);

            Assert.IsType <BadRequestResult>(result);
        }
Example #7
0
        public ActionResult UpdateBook(int id, BookAddDto bookDto)
        {
            var theBook = _bookRepo.GetBookById(id);

            if (theBook == null)
            {
                return(NotFound());
            }

            _mapper.Map(bookDto, theBook);

            _bookRepo.UpdateBook(theBook);
            _bookRepo.SaveChanges();

            return(NoContent());
        }
Example #8
0
        public async void Add_ShouldReturnOk_WhenBookIsAdded()
        {
            var book       = CreateBook();
            var bookAddDto = new BookAddDto()
            {
                Name = book.Name
            };
            var bookResultDto = MapModelToBookResultDto(book);

            _mapperMock.Setup(m => m.Map <Book>(It.IsAny <BookAddDto>())).Returns(book);
            _bookServiceMock.Setup(c => c.Add(book)).ReturnsAsync(book);
            _mapperMock.Setup(m => m.Map <BookResultDto>(It.IsAny <Book>())).Returns(bookResultDto);

            var result = await _booksController.Add(bookAddDto);

            Assert.IsType <OkObjectResult>(result);
        }
Example #9
0
        public async Task <IActionResult> Add(BookAddDto bookDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var book       = _mapper.Map <Book>(bookDto);
            var bookResult = await _bookService.Add(book);

            if (bookResult == null)
            {
                return(BadRequest());
            }

            return(Ok(_mapper.Map <BookResultDto>(bookResult)));
        }
Example #10
0
        public async Task Create(BookAddDto book)
        {
            var bookToAdd = _mapper.Map <Book>(book);
            await _bookRepo.CreateAsync(bookToAdd);

            await _bookRepo.SaveChangesAsync();

            var bookAuthorsToAdd = book.AuthorsIds.Select(aId => new AuthorBook
            {
                AuthorId = aId,
                BookId   = bookToAdd.Id
            });

            foreach (var ba in bookAuthorsToAdd)
            {
                await _authorBookRepo.CreateAsync(ba);
            }
            await _authorBookRepo.SaveChangesAsync();
        }
Example #11
0
        public ActionResult <BookReadDto> AddBook(BookAddDto bookAddDto)
        {
            int userId = Int32.Parse(User.Claims.First(p => p.Type == "id").Value);

            if (Int32.Parse(User.Claims.First(p => p.Type == "id").Value) != userId)
            {
                return(Forbid());
            }

            var bookModel = _mapper.Map <Book>(bookAddDto);

            bookModel.UserId    = userId;
            bookModel.AddedDate = DateTime.Now;
            bookModel.IsAvaible = true;
            _repo.AddBook(bookModel);
            _repo.SaveChanges();

            var bookReadDto = _mapper.Map <BookReadDto>(bookModel);

            return(Ok(bookReadDto));
        }