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();