diff --git a/pom.xml b/pom.xml index c14f5d8..6cef1d7 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,17 @@ org.hibernate.validator hibernate-validator + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.1.0 + diff --git a/src/main/java/com/bookstore/controller/BookController.java b/src/main/java/com/bookstore/controller/BookController.java index 038458c..d91ef09 100644 --- a/src/main/java/com/bookstore/controller/BookController.java +++ b/src/main/java/com/bookstore/controller/BookController.java @@ -4,9 +4,12 @@ import com.bookstore.dto.BookSearchParametersDto; import com.bookstore.dto.CreateBookRequestDto; import com.bookstore.service.BookService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -18,6 +21,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +@Tag(name = "Book management", description = "Endpoints for managing books") @RequiredArgsConstructor @RestController @RequestMapping(value = "/api/books") @@ -25,34 +29,40 @@ public class BookController { private final BookService bookService; @GetMapping - public List getAll() { - return bookService.getAll(); + @Operation(summary = "Get all books", description = "Get a list of available books") + public List getAll(Pageable pageable) { + return bookService.getAll(pageable); } @GetMapping("/{id}") + @Operation(summary = "Get book by specific id", description = "Get book by specific id") public BookDto getBookById(@PathVariable Long id) { return bookService.getBookById(id); } @PostMapping @ResponseStatus(HttpStatus.CREATED) + @Operation(summary = "Create a new book", description = "Create a new book") public BookDto createBook(@RequestBody @Valid CreateBookRequestDto bookRequestDto) { return bookService.createBook(bookRequestDto); } @PutMapping("/{id}") @ResponseStatus(HttpStatus.ACCEPTED) + @Operation(summary = "Update the existing book", description = "Update the existing book") public void updateBook(@PathVariable Long id, @RequestBody @Valid CreateBookRequestDto bookRequestDto) { bookService.updateBook(id, bookRequestDto); } @DeleteMapping("/{id}") + @Operation(summary = "Delete book", description = "Delete book by specific id") public void deleteBookById(@PathVariable Long id) { bookService.deleteBookById(id); } @GetMapping("/search") + @Operation(summary = "Search books", description = "Search book by specific search parameters") public List searchBooks(BookSearchParametersDto searchParameters) { return bookService.searchBooks(searchParameters); } diff --git a/src/main/java/com/bookstore/service/BookService.java b/src/main/java/com/bookstore/service/BookService.java index 0d0ded9..9f0e4dc 100644 --- a/src/main/java/com/bookstore/service/BookService.java +++ b/src/main/java/com/bookstore/service/BookService.java @@ -4,13 +4,14 @@ import com.bookstore.dto.BookSearchParametersDto; import com.bookstore.dto.CreateBookRequestDto; import java.util.List; +import org.springframework.data.domain.Pageable; public interface BookService { BookDto createBook(CreateBookRequestDto bookRequestDto); BookDto getBookById(Long id); - List getAll(); + List getAll(Pageable pageable); void updateBook(Long id, CreateBookRequestDto bookRequestDto); diff --git a/src/main/java/com/bookstore/service/impl/BookServiceImpl.java b/src/main/java/com/bookstore/service/impl/BookServiceImpl.java index 0bd6306..3068c8f 100644 --- a/src/main/java/com/bookstore/service/impl/BookServiceImpl.java +++ b/src/main/java/com/bookstore/service/impl/BookServiceImpl.java @@ -11,6 +11,7 @@ import com.bookstore.service.BookService; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; @@ -36,8 +37,8 @@ public BookDto getBookById(Long id) { } @Override - public List getAll() { - return bookRepository.findAll() + public List getAll(Pageable pageable) { + return bookRepository.findAll(pageable) .stream() .map(bookMapper::toDto) .toList();