Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public class ReviewResponse {
private String content;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// 답변 완료 여부
private Boolean hasReply;
// 작성자 정보 (내부 클래스로 구성)
private WriterInfo writer;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,8 @@ public interface ReviewReplyRepository extends JpaRepository<ReviewReply, Long>
Page<ReviewReply> findByCreatedByOrderByCreatedAtDesc(@Param("userId") Long userId, Pageable pageable);

Long countByReviewId(Long reviewId);

@Query("SELECT rr.review.id, COUNT(rr) FROM ReviewReply rr WHERE rr.review.id IN :reviewIds GROUP BY rr.review.id")
List<Object[]> countByReviewIds(@Param("reviewIds") List<Long> reviewIds);
}

Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,31 @@ public ReviewResponse getReview(Long reviewId) {

@Transactional(readOnly = true)
public List<ReviewResponse> getReviewsByPostId(Long postId) {
return reviewRepository
.findByPostId(postId)
.stream()
.map(this::toReviewResponse)
List<Review> reviews = reviewRepository.findByPostId(postId);

List<Long> reviewIds = reviews.stream()
.map(Review::getId)
.collect(Collectors.toList());

// 리뷰 ID별 답글 개수 Map 생성
java.util.Map<Long, Long> replyCountMap = java.util.Collections.emptyMap();
if (!reviewIds.isEmpty()) {
replyCountMap = reviewReplyRepository.countByReviewIds(reviewIds)
.stream()
.collect(Collectors.toMap(
result -> ((Number) result[0]).longValue(),
result -> ((Number) result[1]).longValue()
));
}

final java.util.Map<Long, Long> finalReplyCountMap = replyCountMap;

return reviews.stream()
.map(review -> {
boolean hasReply = finalReplyCountMap.containsKey(review.getId())
&& finalReplyCountMap.get(review.getId()) > 0;
return toReviewResponse(review, hasReply);
})
.collect(Collectors.toList());
}

Expand Down Expand Up @@ -239,6 +260,10 @@ public ReviewStatusResponse getReviewStatus(Long userId, Long postId) {
}

private ReviewResponse toReviewResponse(Review review) {
return toReviewResponse(review, false);
}

private ReviewResponse toReviewResponse(Review review, boolean hasReply) {
User createdBy = review.getCreatedBy();

return ReviewResponse.builder()
Expand All @@ -248,6 +273,7 @@ private ReviewResponse toReviewResponse(Review review) {
.content(review.getContent())
.createdAt(review.getCreatedAt())
.updatedAt(review.getUpdatedAt())
.hasReply(hasReply)
.writer(ReviewResponse.WriterInfo.builder()
.id(createdBy.getId())
.nickname(createdBy.getNickname() != null ? createdBy.getNickname() : "")
Expand Down