From ea61eaf47e788488491121689e836d0b29e64c84 Mon Sep 17 00:00:00 2001 From: sb Date: Sat, 11 Jul 2026 13:58:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=82=B0=EC=B1=85=20=EB=A9=94=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=AA=A9=EB=A1=9D=EC=97=90=EC=84=9C=20=EB=B3=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B0=95=EC=95=84=EC=A7=80=20=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GET /api/spots/{id}/mates?userId= 로 회원 소유 강아지를 제외. 본인 강아지가 메이트로 노출되던 혼란 해소. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/dog/dognation/api/SpotController.java | 7 ++++--- .../com/dog/dognation/domain/spot/SpotService.java | 13 ++++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/dog/dognation/api/SpotController.java b/src/main/java/com/dog/dognation/api/SpotController.java index 4801a09..647bb6c 100644 --- a/src/main/java/com/dog/dognation/api/SpotController.java +++ b/src/main/java/com/dog/dognation/api/SpotController.java @@ -49,10 +49,11 @@ public class SpotController { return ResponseEntity.status(HttpStatus.CREATED).body(body); } - /** 스팟에 현재 체크인 중인 메이트 목록 */ + /** 스팟에 현재 체크인 중인 메이트 목록 (userId 지정 시 본인 강아지 제외) */ @GetMapping("/{id}/mates") - public List mates(@PathVariable Long id) { - return spotService.activeMates(id).stream().map(MateResponse::from).toList(); + public List mates(@PathVariable Long id, + @RequestParam(required = false) Long userId) { + return spotService.activeMates(id, userId).stream().map(MateResponse::from).toList(); } /** AI 궁합 메이트 추천 — 내 강아지(dogId)와 사이좋게 지낼 만한 스팟 내 강아지 목록 */ diff --git a/src/main/java/com/dog/dognation/domain/spot/SpotService.java b/src/main/java/com/dog/dognation/domain/spot/SpotService.java index dd353bb..12476bb 100644 --- a/src/main/java/com/dog/dognation/domain/spot/SpotService.java +++ b/src/main/java/com/dog/dognation/domain/spot/SpotService.java @@ -58,9 +58,12 @@ public class SpotService { return saved; } - /** 스팟에 현재 체크인 중인 강아지(메이트) 목록 — 최근 24시간(Redis), 최신순. */ + /** + * 스팟에 현재 체크인 중인 강아지(메이트) 목록 — 최근 24시간(Redis), 최신순. + * excludeUserId 가 주어지면 해당 회원 소유 강아지(=본인 강아지)는 제외한다. + */ @Transactional(readOnly = true) - public List activeMates(Long spotId) { + public List activeMates(Long spotId, Long excludeUserId) { List dogIds = checkInRedisStore.activeDogIds(spotId); if (dogIds.isEmpty()) { return List.of(); @@ -68,7 +71,11 @@ public class SpotService { // Redis 최신순 유지 — findAllById 는 순서를 보장하지 않으므로 매핑 후 재정렬. Map byId = dogRepository.findAllById(dogIds).stream() .collect(Collectors.toMap(Dog::getId, Function.identity())); - return dogIds.stream().map(byId::get).filter(Objects::nonNull).toList(); + return dogIds.stream() + .map(byId::get) + .filter(Objects::nonNull) + .filter(d -> excludeUserId == null || !excludeUserId.equals(d.getUserId())) + .toList(); } @Transactional(readOnly = true)