diff --git a/RomRom-Domain-Item/src/main/java/com/romrom/item/repository/postgres/ItemRepositoryImpl.java b/RomRom-Domain-Item/src/main/java/com/romrom/item/repository/postgres/ItemRepositoryImpl.java index 898a5515..8994210e 100644 --- a/RomRom-Domain-Item/src/main/java/com/romrom/item/repository/postgres/ItemRepositoryImpl.java +++ b/RomRom-Domain-Item/src/main/java/com/romrom/item/repository/postgres/ItemRepositoryImpl.java @@ -205,6 +205,15 @@ public Page filterItems( } case RECOMMENDED: { + if (longitude != null && latitude != null && radiusInMeters != null) { + BooleanExpression within = Expressions.booleanTemplate( + "function('ST_DistanceSphere', {0}, function('ST_SetSRID', function('ST_MakePoint', {1}, {2}), 4326)) <= {3}", + ITEM.location, longitude, latitude, radiusInMeters + ); + content.where(within); + count.where(within); + } + NumberExpression recommendedScoreExpr = buildRecommendedScoreExpression( memberId, userInteractionScores, diff --git a/RomRom-Domain-Item/src/main/java/com/romrom/item/service/ItemService.java b/RomRom-Domain-Item/src/main/java/com/romrom/item/service/ItemService.java index 1eac014a..22572b3e 100644 --- a/RomRom-Domain-Item/src/main/java/com/romrom/item/service/ItemService.java +++ b/RomRom-Domain-Item/src/main/java/com/romrom/item/service/ItemService.java @@ -217,7 +217,7 @@ public ItemResponse getItemList(ItemRequest request) { // 회원 위치 조회 Double longitude = null; Double latitude = null; - if (sortField == ItemSortField.DISTANCE) { + if (sortField == ItemSortField.DISTANCE || sortField == ItemSortField.RECOMMENDED) { Point geom = memberLocationRepository.findByMemberMemberId(request.getMember().getMemberId()) .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_LOCATION_NOT_FOUND)) .getGeom(); @@ -226,13 +226,18 @@ public ItemResponse getItemList(ItemRequest request) { } // 회원 탐색 범위 조회 - Double radiusInMeters; - if (request.getMember().getSearchRadiusInMeters() != null) { - radiusInMeters = request.getMember().getSearchRadiusInMeters(); - } else { + Double radiusInMeters = request.getMember().getSearchRadiusInMeters(); + + if (radiusInMeters == null) { radiusInMeters = request.getRadiusInMeters(); } + // 회원 탐색 범위 미설정 시 10km로 적용 + if (radiusInMeters == null) { + radiusInMeters = 10000.0; + log.debug("회원 탐색 범위 미설정 - 10km 적용: memberId={}", request.getMember().getMemberId()); + } + List userScores = null; List preferredCategories = null; diff --git a/RomRom-Web/src/main/java/com/romrom/web/controller/api/ItemControllerDocs.java b/RomRom-Web/src/main/java/com/romrom/web/controller/api/ItemControllerDocs.java index b4717265..f6c6a153 100644 --- a/RomRom-Web/src/main/java/com/romrom/web/controller/api/ItemControllerDocs.java +++ b/RomRom-Web/src/main/java/com/romrom/web/controller/api/ItemControllerDocs.java @@ -126,6 +126,7 @@ ResponseEntity postLike( ); @ApiChangeLogs({ + @ApiChangeLog(date = "2026.02.27", author = Author.KIMNAYOUNG, issueNumber = 538, description = "추천 물품 리스트 조회 시 사용자 반경내 물품만 반환"), @ApiChangeLog(date = "2026.02.10", author = Author.SUHSAECHAN, issueNumber = 496, description = "물품 리스트 조회 시 각 Item 내부에 신고 여부(isReported) 플래그 추가"), @ApiChangeLog(date = "2026.01.20", author = Author.KIMNAYOUNG, issueNumber = 443, description = "사용자 맞춤형 추천 시스템 추가"), @ApiChangeLog(date = "2026.01.03", author = Author.WISEUNGJAE, issueNumber = 428, description = "물품 탐색 시, 차단된 회원의 물품을 제외하는 로직 추가"), @@ -340,6 +341,10 @@ ResponseEntity postLike( - PREFERRED_CATEGORY / ASC : 선호 카테고리와 물품 간의 유사도가 높은 순으로 정렬된 물품 리스트 - RECOMMENDED / ASC : 추천 순으로 정렬된 물품 리스트 - sortField, sortDirection이 null인 경우 기본값은 CREATED_DATE, DESC + + ## 에러코드 + - **`EMBEDDING_NOT_FOUND`**: 임베딩을 찾을 수 없습니다. (회원 선호 카테고리 임베딩) + - **`MEMBER_LOCATION_NOT_FOUND`**: 회원 위치 정보가 등록되지 않았습니다. """ ) ResponseEntity getItemList(