diff --git a/src/main/java/com/keepgoing/keepserver/domain/book/domain/repository/BookRepository.java b/src/main/java/com/keepgoing/keepserver/domain/book/domain/repository/BookRepository.java index cb24f35..e7b3047 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/book/domain/repository/BookRepository.java +++ b/src/main/java/com/keepgoing/keepserver/domain/book/domain/repository/BookRepository.java @@ -3,7 +3,9 @@ import com.keepgoing.keepserver.domain.book.domain.entity.Book; import com.keepgoing.keepserver.domain.user.domain.entity.user.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; + import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -11,7 +13,13 @@ @Repository public interface BookRepository extends JpaRepository { Book findBookByNfcCode(String NfcCode); + Optional findBookByNfcCodeContaining(String NfcCode); + List findByBorrower(User borrower); + List findByBorrowerAndRentDateBetween(User borrower, LocalDateTime startDate, LocalDateTime endDate); + + @Query(value = "SELECT * FROM keep.book order by RAND() limit 3", nativeQuery = true) + List selectAll(); } diff --git a/src/main/java/com/keepgoing/keepserver/domain/book/presentation/BookController.java b/src/main/java/com/keepgoing/keepserver/domain/book/presentation/BookController.java index 0ef4b53..e93456c 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/book/presentation/BookController.java +++ b/src/main/java/com/keepgoing/keepserver/domain/book/presentation/BookController.java @@ -54,4 +54,10 @@ public BaseResponse editBookByNfcCode(@PathVariable(value = "nfcCode") String nf @RequestBody BookRequestDto bookRequest) throws IOException { return bookService.editBook(nfcCode, bookRequest); } + + @Operation(summary = "추천 도서 불러오기", description = "추천 도서를 불러옵니다") + @GetMapping("/recommend") + public BaseResponse selectRecommendBook(){ + return bookService.selectRecommendBook(); + } } diff --git a/src/main/java/com/keepgoing/keepserver/domain/book/service/BookService.java b/src/main/java/com/keepgoing/keepserver/domain/book/service/BookService.java index 3632ad5..cdff464 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/book/service/BookService.java +++ b/src/main/java/com/keepgoing/keepserver/domain/book/service/BookService.java @@ -4,16 +4,25 @@ import com.keepgoing.keepserver.domain.book.payload.request.BookRequestDto; import com.keepgoing.keepserver.global.common.BaseResponse; import org.springframework.security.core.Authentication; + import java.io.IOException; public interface BookService { BaseResponse bookRegister(BookDto bookDto); + BaseResponse selectAllBook(); + BaseResponse deleteBook(String nfcCode, Authentication auth); + BaseResponse selectMyBook(Authentication auth); + BaseResponse alertMyBook(Authentication auth, String date); + String createNfcCode(); + BaseResponse editBook(String nfcCode, BookRequestDto bookRequest) throws IOException; + + BaseResponse selectRecommendBook(); } diff --git a/src/main/java/com/keepgoing/keepserver/domain/book/service/BookServiceImpl.java b/src/main/java/com/keepgoing/keepserver/domain/book/service/BookServiceImpl.java index a0482fd..2fdc848 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/book/service/BookServiceImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/book/service/BookServiceImpl.java @@ -38,7 +38,9 @@ public BaseResponse bookRegister(BookDto bookDto) { @Override @Transactional(readOnly = true) public BaseResponse selectAllBook() { - return new BaseResponse(HttpStatus.OK, "책 불러오기 성공", bookRepository.findAll().stream().map(bookMapper::entityToDto).toList()); + return new BaseResponse(HttpStatus.OK, + "책 불러오기 성공", + bookRepository.findAll().stream().map(bookMapper::entityToDto).toList()); } @Override @@ -89,13 +91,23 @@ public String createNfcCode() { public BaseResponse editBook(String nfcCode, BookRequestDto bookRequest) { Book book = bookRepository.findBookByNfcCode(nfcCode); - if (bookRequest.state() != null) book.setState(bookRequest.state()); - if (bookRequest.imageUrl() != null) book.setImageUrl(bookRequest.imageUrl()); - if (bookRequest.name() != null) book.setBookName(bookRequest.name()); + if (bookRequest.state() != null) + book.setState(bookRequest.state()); + if (bookRequest.imageUrl() != null) + book.setImageUrl(bookRequest.imageUrl()); + if (bookRequest.name() != null) + book.setBookName(bookRequest.name()); bookRepository.save(book); return new BaseResponse(HttpStatus.OK, "책 정보 수정 성공"); } + @Override + @Transactional(readOnly = true) + public BaseResponse selectRecommendBook() { + List bookLst = bookRepository.selectAll(); + return new BaseResponse(HttpStatus.OK, "책 불러오기 성공", bookLst.stream().map(bookMapper::entityToDto).toList()); + } + private User getUserByAuthentication(Authentication auth) { if (auth == null) { throw BookException.userNotFound(); @@ -104,4 +116,5 @@ private User getUserByAuthentication(Authentication auth) { return userRepository.findByEmail(auth.getName()) .orElseThrow(BookException::userNotFound); } + } \ No newline at end of file