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 @@ -9,6 +9,7 @@
import com.flipflick.backend.common.response.ApiResponse;
import com.flipflick.backend.common.response.SuccessStatus;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand All @@ -26,14 +27,16 @@ public class RecommendationController {
private final RecommendationService recommendationService;

@Operation(summary = "유사한 성향 사용자 리뷰 조회", description = "나와 비슷한 성향의 사용자들이 작성한 리뷰를 조회합니다.")
@GetMapping("/similar-reviews")
@GetMapping("/similar-reviews/{tmdbId}")
public ResponseEntity<ApiResponse<ReviewResponseDto.PageResponse>> getSimilarUserReviews(
@AuthenticationPrincipal SecurityMember securityMember,
@Parameter(description = "영화 TMDB ID", example = "550")
@PathVariable Long tmdbId,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {

ReviewResponseDto.PageResponse result = recommendationService.getSimilarUserReviews(
securityMember.getId(), page, size);
securityMember.getId(), page, size, tmdbId);

return ApiResponse.success(SuccessStatus.SEND_REVIEW_LIST_SUCCESS, result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class RecommendationService {
private String pythonServerUrl;

// 🎯 추가: 유사한 성향 사용자들의 리뷰 조회
public ReviewResponseDto.PageResponse getSimilarUserReviews(Long memberId, int page, int size) {
public ReviewResponseDto.PageResponse getSimilarUserReviews(Long memberId, int page, int size, Long tmdbId) {
// 1. 캐시된 유사 사용자 목록 조회
List<Long> similarUserIds = getSimilarUserIds(memberId);

Expand All @@ -60,10 +60,10 @@ public ReviewResponseDto.PageResponse getSimilarUserReviews(Long memberId, int p
.build();
}

// 2. 유사 사용자들의 리뷰 조회 (본인 제외, 평점 4점 이상만)
// 2. 유사 사용자들의 리뷰 조회 (본인 제외, 평점 0.0점 이상만)
Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());
Page<Review> reviewPage = reviewRepository.findHighRatedReviewsBySimilarUsers(
similarUserIds, memberId, 4.0, pageable);
Page<Review> reviewPage = reviewRepository.findHighRatedReviewsBySimilarUsersAndTmdbId(
similarUserIds, memberId, 0.0, tmdbId, pageable);

// 3. DTO 변환
Page<ReviewResponseDto.Detail> detailPage = reviewPage.map(this::convertToDetail);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,14 @@ AND EXISTS (
AND r.member.id != :excludeMemberId
AND r.star >= :minRating
AND r.isDeleted = false
AND r.movie.tmdbId = :tmdbId
ORDER BY r.star DESC, r.likeCnt DESC
""")
Page<Review> findHighRatedReviewsBySimilarUsers(
Page<Review> findHighRatedReviewsBySimilarUsersAndTmdbId(
@Param("similarUserIds") List<Long> similarUserIds,
@Param("excludeMemberId") Long excludeMemberId,
@Param("minRating") Double minRating,
@Param("tmdbId") Long tmdbId,
Pageable pageable);

/**
Expand Down