From c879eaa067079104b06239ed21b8de76a8c53ad2 Mon Sep 17 00:00:00 2001 From: rhkr8521 Date: Thu, 5 Feb 2026 17:45:01 +0900 Subject: [PATCH] =?UTF-8?q?[FIX]=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=ED=83=80=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EB=B3=84=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberController.java | 8 ++++++-- .../api/member/service/MemberService.java | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java b/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java index aeccf43..070426d 100644 --- a/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java +++ b/src/main/java/com/moongeul/backend/api/member/controller/MemberController.java @@ -112,7 +112,8 @@ public ResponseEntity> getPostStats( @Operation( summary = "카테고리별 기록 리스트 조회 API (마이페이지 기록장 상세)", - description = "특정 카테고리에 작성된 기록들을 조회합니다. 최신순, 오래된순, 평점 높은순, 평점 낮은순으로 정렬할 수 있습니다." + + description = "특정 카테고리에 작성된 기록들을 조회합니다. userId 쿼리 파라미터가 없으면 본인, 있으면 해당 사용자의 기록을 조회합니다. " + + "최신순, 오래된순, 평점 높은순, 평점 낮은순으로 정렬할 수 있습니다." + "

[enum] 정렬 옵션 (sortBy):" + "
- LATEST: 최신순 (기본값)" + "
- OLDEST: 오래된순" + @@ -125,12 +126,15 @@ public ResponseEntity> getPostStats( }) @GetMapping("/post-stats/{categoryId}") public ResponseEntity> getCategoryPostList( + @AuthenticationPrincipal UserDetails userDetails, @PathVariable Long categoryId, + @RequestParam(required = false) Long userId, @RequestParam(defaultValue = "LATEST") String sortBy, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) { - CategoryPostListResponseDTO categoryPostListResponseDTO = memberService.getCategoryPostList(categoryId, sortBy, page, size); + CategoryPostListResponseDTO categoryPostListResponseDTO = + memberService.getCategoryPostList(userDetails.getUsername(), userId, categoryId, sortBy, page, size); return ApiResponse.success(SuccessStatus.GET_CATEGORY_POST_LIST_SUCCESS, categoryPostListResponseDTO); } diff --git a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java index 80991a7..6f826b2 100644 --- a/src/main/java/com/moongeul/backend/api/member/service/MemberService.java +++ b/src/main/java/com/moongeul/backend/api/member/service/MemberService.java @@ -292,12 +292,23 @@ public NicknameCheckResponseDTO checkNicknameDuplicate(String nickname) { // 카테고리별 기록 리스트 조회 @Transactional(readOnly = true) - public CategoryPostListResponseDTO getCategoryPostList(Long categoryId, String sortBy, Integer page, Integer size) { + public CategoryPostListResponseDTO getCategoryPostList(String email, Long userId, Long categoryId, String sortBy, Integer page, Integer size) { + + Member currentMember = getMemberByEmail(email); + Member targetMember = (userId == null) + ? currentMember + : memberRepository.findById(userId) + .orElseThrow(() -> new NotFoundException(ErrorStatus.USER_NOTFOUND_EXCEPTION.getMessage())); // 카테고리 존재 여부 확인 - categoryRepository.findById(categoryId) + Category category = categoryRepository.findById(categoryId) .orElseThrow(() -> new NotFoundException(ErrorStatus.CATEGORY_NOTFOUND_EXCEPTION.getMessage())); + // 카테고리 소유자 확인 (userId가 없으면 본인 기준) + if (!category.getMember().getId().equals(targetMember.getId())) { + throw new NotFoundException(ErrorStatus.CATEGORY_NOTFOUND_EXCEPTION.getMessage()); + } + Pageable pageable = PageRequest.of(page - 1, size); // 정렬 조건에 따라 조회 @@ -318,8 +329,8 @@ public CategoryPostListResponseDTO getCategoryPostList(Long categoryId, String s .map(this::convertToCategoryPostDetailDTO) .collect(Collectors.toList()); - log.info("카테고리별 기록 리스트 조회 완료 - 카테고리 ID: {}, 정렬: {}, 페이지: {}, 결과 수: {}", - categoryId, sortBy, page, postList.size()); + log.info("카테고리별 기록 리스트 조회 완료 - 카테고리 ID: {}, 사용자 ID: {}, 정렬: {}, 페이지: {}, 결과 수: {}", + categoryId, targetMember.getId(), sortBy, page, postList.size()); return CategoryPostListResponseDTO.builder() .total(postPage.getTotalElements())