|
4 | 4 | import org.poolc.api.book.domain.BookSortOption; |
5 | 5 | import org.springframework.data.domain.Page; |
6 | 6 | import org.springframework.data.domain.Pageable; |
| 7 | +import org.springframework.data.jpa.domain.Specification; |
7 | 8 | import org.springframework.data.jpa.repository.JpaRepository; |
8 | 9 |
|
9 | 10 | import java.util.Optional; |
| 11 | + |
| 12 | +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; |
10 | 13 | import org.springframework.data.jpa.repository.Query; |
| 14 | +import org.springframework.data.repository.query.Param; |
11 | 15 |
|
12 | | -public interface BookRepository extends JpaRepository<Book, Long> { |
| 16 | +public interface BookRepository extends JpaRepository<Book, Long>, JpaSpecificationExecutor<Book> { |
13 | 17 | boolean existsByTitleAndAuthor(String title, String author); |
14 | 18 |
|
15 | 19 | Optional<Book> findBookById(Long id); |
16 | 20 | Page<Book> findAllByOrderByCreatedAtDesc(Pageable pageable); |
17 | 21 | Page<Book> findAllByOrderByTitleAsc(Pageable pageable); |
18 | 22 |
|
19 | | - @Query("SELECT b FROM Book b WHERE b.title LIKE '%:keyword%' " + |
20 | | - "ORDER BY " + |
21 | | - "CASE WHEN :sortOption = 'TITLE' THEN b.title END ASC, " + |
22 | | - "CASE WHEN :sortOption = 'CREATED_AT' THEN b.createdAt END DESC, " + |
23 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.rentDate END DESC, " + |
24 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.title END ASC") |
25 | | - Page<Book> findAllByTitleContaining(String keyword,String sortOption, Pageable pageable); |
26 | | - |
27 | | - @Query("SELECT b FROM Book b WHERE b.author LIKE '%:keyword%' " + |
28 | | - "ORDER BY " + |
29 | | - "CASE WHEN :sortOption = 'TITLE' THEN b.title END ASC, " + |
30 | | - "CASE WHEN :sortOption = 'CREATED_AT' THEN b.createdAt END DESC, " + |
31 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.rentDate END DESC, " + |
32 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.title END ASC") |
33 | | - Page<Book> findAllByAuthorContaining(String keyword, String sortOption, Pageable pageable); |
34 | | - |
35 | | - @Query("SELECT b FROM Book b WHERE :keyword MEMBER OF b.tags " + |
36 | | - "ORDER BY " + |
37 | | - "CASE WHEN :sortOption = 'TITLE' THEN b.title END ASC, " + |
38 | | - "CASE WHEN :sortOption = 'CREATED_AT' THEN b.createdAt END DESC, " + |
39 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.rentDate END DESC, " + |
40 | | - "CASE WHEN :sortOption = 'RENT_TIME' THEN b.title END ASC") |
41 | | - Page<Book> findAllByTagsContaining(String keyword,String sortOption, Pageable pageable); |
| 23 | + Page<Book> findAll(Specification<Book> spec, Pageable pageable); |
42 | 24 |
|
43 | 25 | @Query("SELECT b FROM Book b " + |
44 | 26 | "ORDER BY CASE WHEN b.rentDate IS NULL THEN 0 ELSE 1 END, " + |
|
0 commit comments