Skip to content

Commit

Permalink
[BSVR-173] 리뷰 pk로 특정 리뷰 조회 API 구현 (#93)
Browse files Browse the repository at this point in the history
* feat: 리뷰 pk로 리뷰 조회하는 컨트롤러 메서드 구현

* feat: 리뷰 pk로 리뷰 조회하는 usecase와 service 메서드 구현

* chore: ReadReviewService 주석삭제

* fix: pr 코멘트 반영한 @notblank -> @NotNull 수정
  • Loading branch information
pminsung12 authored Aug 1, 2024
1 parent fc0caf5 commit e5dc6e8
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.depromeet.spot.application.common.annotation.CurrentMember;
import org.depromeet.spot.application.review.dto.request.BlockReviewRequest;
import org.depromeet.spot.application.review.dto.request.MyReviewRequest;
import org.depromeet.spot.application.review.dto.response.BaseReviewResponse;
import org.depromeet.spot.application.review.dto.response.BlockReviewListResponse;
import org.depromeet.spot.application.review.dto.response.MyRecentReviewResponse;
import org.depromeet.spot.application.review.dto.response.MyReviewListResponse;
Expand Down Expand Up @@ -112,4 +113,16 @@ public MyRecentReviewResponse findMyRecentReview(@Parameter(hidden = true) Long
readReviewUsecase.findLastReviewByMemberId(memberId);
return MyRecentReviewResponse.from(result);
}

@CurrentMember
@ResponseStatus(HttpStatus.OK)
@GetMapping("/reviews/{reviewId}")
@Operation(summary = "리뷰 id(pk)로 특정 리뷰를 조회한다.")
public BaseReviewResponse findReviewByReviewId(
@Parameter(hidden = true) Long memberId,
@PathVariable("reviewId") @NotNull @Parameter(description = "리뷰 PK", required = true)
Long reviewId) {
ReadReviewUsecase.ReviewResult reviewResult = readReviewUsecase.findReviewById(reviewId);
return BaseReviewResponse.from(reviewResult.review());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ MyReviewListResult findMyReviewsByUserId(

MyRecentReviewResult findLastReviewByMemberId(Long memberId);

ReviewResult findReviewById(Long reviewId);

@Builder
record BlockReviewListResult(
LocationInfo location,
Expand Down Expand Up @@ -64,4 +66,7 @@ record MemberInfoOnMyReviewResult(

@Builder
record MyRecentReviewResult(Review review, Long reviewCount) {}

@Builder
record ReviewResult(Review review) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Map;
import java.util.stream.Collectors;

import org.depromeet.spot.common.exception.review.ReviewException.ReviewNotFoundException;
import org.depromeet.spot.domain.member.Member;
import org.depromeet.spot.domain.member.enums.Level;
import org.depromeet.spot.domain.review.Review;
Expand Down Expand Up @@ -108,16 +109,18 @@ public List<ReviewYearMonth> findReviewMonths(Long memberId) {
return reviewRepository.findReviewMonthsByMemberId(memberId);
}

private MemberInfoOnMyReviewResult createMemberInfoFromMember(
Member member, long totalReviewCount) {
return MemberInfoOnMyReviewResult.builder()
.userId(member.getId())
.profileImageUrl(member.getProfileImage())
.level(member.getLevel())
.levelTitle(Level.getTitleFrom(member.getLevel()))
.nickname(member.getNickname())
.reviewCount(totalReviewCount)
.build();
@Override
public ReviewResult findReviewById(Long reviewId) {
Review review =
reviewRepository
.findById(reviewId)
.orElseThrow(
() ->
new ReviewNotFoundException(
"Review not found with id: " + reviewId));
Review reviewWithKeywords = mapKeywordsToSingleReview(review);

return ReviewResult.builder().review(reviewWithKeywords).build();
}

@Override
Expand All @@ -134,55 +137,60 @@ public MyRecentReviewResult findLastReviewByMemberId(Long memberId) {
.build();
}

private List<Review> mapKeywordsToReviews(List<Review> reviews) {
private MemberInfoOnMyReviewResult createMemberInfoFromMember(
Member member, long totalReviewCount) {
return MemberInfoOnMyReviewResult.builder()
.userId(member.getId())
.profileImageUrl(member.getProfileImage())
.level(member.getLevel())
.levelTitle(Level.getTitleFrom(member.getLevel()))
.nickname(member.getNickname())
.reviewCount(totalReviewCount)
.build();
}

private Review mapKeywordsToSingleReview(Review review) {
List<Long> keywordIds =
reviews.stream()
.flatMap(review -> review.getKeywords().stream())
review.getKeywords().stream()
.map(ReviewKeyword::getKeywordId)
.distinct()
.collect(Collectors.toList());

Map<Long, Keyword> keywordMap = keywordRepository.findByIds(keywordIds);

return reviews.stream()
.map(
review -> {
List<ReviewKeyword> mappedKeywords =
review.getKeywords().stream()
.map(
reviewKeyword -> {
Keyword keyword =
keywordMap.get(
reviewKeyword
.getKeywordId());
return ReviewKeyword.create(
reviewKeyword.getId(),
keyword.getId());
})
.collect(Collectors.toList());

Review mappedReview =
Review.builder()
.id(review.getId())
.member(review.getMember())
.stadium(review.getStadium())
.section(review.getSection())
.block(review.getBlock())
.row(review.getRow())
.seat(review.getSeat())
.dateTime(review.getDateTime())
.content(review.getContent())
.deletedAt(review.getDeletedAt())
.images(review.getImages())
.keywords(mappedKeywords)
.build();

// Keyword 정보를 Review 객체에 추가
mappedReview.setKeywordMap(keywordMap);

return mappedReview;
})
.collect(Collectors.toList());
List<ReviewKeyword> mappedKeywords =
review.getKeywords().stream()
.map(
reviewKeyword -> {
Keyword keyword = keywordMap.get(reviewKeyword.getKeywordId());
return ReviewKeyword.create(
reviewKeyword.getId(), keyword.getId());
})
.collect(Collectors.toList());

Review mappedReview =
Review.builder()
.id(review.getId())
.member(review.getMember())
.stadium(review.getStadium())
.section(review.getSection())
.block(review.getBlock())
.row(review.getRow())
.seat(review.getSeat())
.dateTime(review.getDateTime())
.content(review.getContent())
.deletedAt(review.getDeletedAt())
.images(review.getImages())
.keywords(mappedKeywords)
.build();

mappedReview.setKeywordMap(keywordMap);

return mappedReview;
}

private List<Review> mapKeywordsToReviews(List<Review> reviews) {
return reviews.stream().map(this::mapKeywordsToSingleReview).collect(Collectors.toList());
}

private Review mapKeywordsToReview(Review review) {
Expand Down

0 comments on commit e5dc6e8

Please sign in to comment.