diff --git a/src/main/java/com/jisungin/api/review/ReviewController.java b/src/main/java/com/jisungin/api/review/ReviewController.java index 75a6642..03c705f 100644 --- a/src/main/java/com/jisungin/api/review/ReviewController.java +++ b/src/main/java/com/jisungin/api/review/ReviewController.java @@ -29,6 +29,11 @@ public ApiResponse> findBookReviews( return ApiResponse.ok(reviewService.findBookReviews(isbn, OffsetLimit.of(page, size, order))); } + @GetMapping("/books/{isbn}/reviews/count") + public ApiResponse findBookReviewsCount(@PathVariable String isbn) { + return ApiResponse.ok(reviewService.findBookReviewsCount(isbn)); + } + @PostMapping("/reviews") public ApiResponse createReview(@Valid @RequestBody ReviewCreateRequest request, @Auth Long userId) { diff --git a/src/main/java/com/jisungin/application/review/ReviewService.java b/src/main/java/com/jisungin/application/review/ReviewService.java index bceee3d..7587d22 100644 --- a/src/main/java/com/jisungin/application/review/ReviewService.java +++ b/src/main/java/com/jisungin/application/review/ReviewService.java @@ -37,6 +37,13 @@ public SliceResponse findBookReviews(String isbn, Offs offsetLimit.getOrder()); } + public Long findBookReviewsCount(String isbn) { + Book book = bookRepository.findById(isbn) + .orElseThrow(() -> new BusinessException(BOOK_NOT_FOUND)); + + return reviewRepository.countByBookId(book.getIsbn()); + } + @Transactional public void createReview(ReviewCreateServiceRequest request, Long userId) { User user = userRepository.findById(userId) diff --git a/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryCustom.java index e15019f..8ff7f8a 100644 --- a/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryCustom.java @@ -13,4 +13,6 @@ PageResponse findAllReviewContentOrderBy( SliceResponse findAllByBookId(String isbn, Integer offset, Integer limit, String order); + Long countByBookId(String isbn); + } diff --git a/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryImpl.java index 9417041..63f908a 100644 --- a/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/com/jisungin/domain/review/repository/ReviewRepositoryImpl.java @@ -96,6 +96,14 @@ private List getReviewContents( .fetch(); } + public Long countByBookId(String isbn) { + return queryFactory.select(review.count()) + .from(review) + .join(review.book, book) + .where(book.isbn.eq(isbn)) + .fetchOne(); + } + private long getTotalCount(Long userId, Double rating) { return queryFactory .select(review.count())