diff --git a/src/main/java/com/example/withpeace/repository/PolicyRepository.java b/src/main/java/com/example/withpeace/repository/PolicyRepository.java index 8fe57c7..cd47a43 100644 --- a/src/main/java/com/example/withpeace/repository/PolicyRepository.java +++ b/src/main/java/com/example/withpeace/repository/PolicyRepository.java @@ -36,6 +36,9 @@ public interface PolicyRepository extends JpaRepository, JpaSpec @EntityGraph(attributePaths = {"region"}) Optional findById(String policyId); + // 추천된 정책 ID 목록을 기반으로 필터 없이 모든 정책을 조회 + List findByIdIn(List policyIds); + // 추천된 정책 ID 목록 중, 지역/분야 조건에 맞는 정책만 필터링하여 조회 @Query(value = """ SELECT p.* FROM policies p diff --git a/src/main/java/com/example/withpeace/service/PolicyService.java b/src/main/java/com/example/withpeace/service/PolicyService.java index 4c69c16..478027c 100644 --- a/src/main/java/com/example/withpeace/service/PolicyService.java +++ b/src/main/java/com/example/withpeace/service/PolicyService.java @@ -371,11 +371,26 @@ private List getInteractionBasedRecommendations(User user .map(Map.Entry::getKey) .toList(); - List filteredRecommendedPolicies = policyRepository.findFilteredPoliciesByIdIn( - recommendedPolicyIds, - regionList, regionList.size(), - classificationList, classificationList.size() - ).stream().limit(MAX_RECOMMENDATION_COUNT).toList(); + List filteredRecommendedPolicies; + boolean hasRegionFilter = !regionList.isEmpty(); + boolean hasClassificationFilter = !classificationList.isEmpty(); + + if(!hasRegionFilter && !hasClassificationFilter) { + // 필터 조건이 없는 경우: 단순 ID 조회 (nativeQuery 아님) + filteredRecommendedPolicies = policyRepository.findByIdIn(recommendedPolicyIds) + .stream() + .limit(MAX_RECOMMENDATION_COUNT) + .toList(); + } else { + // 필터 조건이 존재하는 경우: nativeQuery 기반 필터링 쿼리 사용 + filteredRecommendedPolicies = policyRepository.findFilteredPoliciesByIdIn( + recommendedPolicyIds, + regionList, regionList.size(), + classificationList, classificationList.size() + ).stream() + .limit(MAX_RECOMMENDATION_COUNT) + .toList(); + } // 사용자가 찜한 정책 ID 목록 조회 Set favoritePolicyIds = getFavoritePolicyIdsFromEntities(user.getId(), filteredRecommendedPolicies);