public async Task <ActionResult <BookResource> > UpdateBook(SaveBookResource saveBookResource)
        {
            var validator        = new SaveBookResourceValidator();
            var validationResult = await validator.ValidateAsync(saveBookResource);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Errors));
            }

            var bookToCreate = _mapper.Map <SaveBookResource, Book>(saveBookResource);

            await _bookService.UpdateBook(bookToCreate, bookToCreate);

            // Delete from reference table all Book-Authors
            var bookAuthorsToDelete = await _bookAuhtorService.GetBookAuthorById(saveBookResource.Id);

            foreach (var authorToDelete in bookAuthorsToDelete)
            {
                await _bookAuhtorService.DeleteBookAuthor(authorToDelete);
            }

            // Add to reference table all Book-Authors
            foreach (var author in saveBookResource.Authors)
            {
                BookAuthorResource bookAuthorResource = new BookAuthorResource();
                bookAuthorResource.AuthorId = author.Id;
                bookAuthorResource.BookId   = saveBookResource.Id;

                var bookAuthorToAdd = _mapper.Map <BookAuthorResource, BookAuthor>(bookAuthorResource);
                var newBookAuthor   = await _bookAuhtorService.CreateBookAuthor(bookAuthorToAdd);
            }


            // Delete from reference table all Book-Categories
            var bookCategoryToDelete = await _bookCategoryService.GetBookCategoryById(saveBookResource.Id);

            foreach (var categoryToDelete in bookCategoryToDelete)
            {
                await _bookCategoryService.DeleteBookCategory(categoryToDelete);
            }

            // Add to reference table all Book-Categories
            foreach (var category in saveBookResource.Categories)
            {
                BookCategoryResource bookCategoryResource = new BookCategoryResource();
                bookCategoryResource.CategoryId = category.Id;
                bookCategoryResource.BookId     = saveBookResource.Id;

                var bookCategoryToCreate = _mapper.Map <BookCategoryResource, BookCategory>(bookCategoryResource);
                var newBookCategory      = await _bookCategoryService.CreateBookCategory(bookCategoryToCreate);
            }

            var databaseBooks = await _bookService.GetWithCategoriesAndAuthorById(saveBookResource.Id);

            return(Ok(_mapper.Map <Book, BookResource>(databaseBooks)));
        }
        public async Task <ActionResult <BookResource> > CreateBook(SaveBookResource saveBookResource)
        {
            var validator        = new SaveBookResourceValidator();
            var validationResult = await validator.ValidateAsync(saveBookResource);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Errors));
            }

            var bookToCreate = _mapper.Map <SaveBookResource, Book>(saveBookResource);

            var newBook = await _bookService.CreateBook(bookToCreate);

            foreach (var author in saveBookResource.Authors)
            {
                BookAuthorResource bookAuthorResource = new BookAuthorResource();
                bookAuthorResource.AuthorId = author.Id;
                bookAuthorResource.BookId   = newBook.Id;

                var bookAuthorToCreate = _mapper.Map <BookAuthorResource, BookAuthor>(bookAuthorResource);
                var newBookAuhtor      = await _bookAuhtorService.CreateBookAuthor(bookAuthorToCreate);
            }

            foreach (var category in saveBookResource.Categories)
            {
                BookCategoryResource bookCategoryResource = new BookCategoryResource();
                bookCategoryResource.CategoryId = category.Id;
                bookCategoryResource.BookId     = newBook.Id;

                var bookCategoryToCreate = _mapper.Map <BookCategoryResource, BookCategory>(bookCategoryResource);
                var newBookCategory      = await _bookCategoryService.CreateBookCategory(bookCategoryToCreate);
            }

            var databaseBooks = await _bookService.GetWithCategoriesAndAuthorById(newBook.Id);

            return(Ok(_mapper.Map <Book, BookResource>(databaseBooks)));
        }