diff --git a/backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java b/backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java index de478aa..38e00a6 100644 --- a/backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java +++ b/backend/src/main/java/com/ai/lawyer/domain/post/controller/PostController.java @@ -131,13 +131,21 @@ public ResponseEntity> getMyPostById(@PathVariable Long pos @Operation(summary = "본인 게시글 전체 조회") @GetMapping("/my") + public ResponseEntity>> getMyPosts() { + Long memberId = AuthUtil.getAuthenticatedMemberId(); + List posts = postService.getMyPosts(memberId); + return ResponseEntity.ok(new ApiResponse<>(200, "본인 게시글 전체 조회 성공", posts)); + } + + @Operation(summary = "본인 게시글 전체 패이징 조회") + @GetMapping("/mypaged") public ResponseEntity>> getMyPosts( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size ) { Pageable pageable = PageRequest.of(page, size, org.springframework.data.domain.Sort.by("updatedAt").descending()); Long memberId = AuthUtil.getAuthenticatedMemberId(); - Page response = postService.getMyPosts(pageable, memberId); + Page response = postService.getMyPostspaged(pageable, memberId); return ResponseEntity.ok(new ApiResponse<>(200, "본인 게시글 전체 조회 성공", response)); } diff --git a/backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java b/backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java index 2544fcf..65860de 100644 --- a/backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java +++ b/backend/src/main/java/com/ai/lawyer/domain/post/service/PostService.java @@ -30,7 +30,8 @@ public interface PostService { // ===== 본인 게시글 관련 ===== PostDto getMyPostById(Long postId, Long requesterMemberId); - Page getMyPosts(Pageable pageable, Long requesterMemberId); + List getMyPosts(Long requesterMemberId); + Page getMyPostspaged(Pageable pageable, Long requesterMemberId); // ===== 페이징 관련 ===== Page getPostsPaged(Pageable pageable, Long memberId); diff --git a/backend/src/main/java/com/ai/lawyer/domain/post/service/PostServiceImpl.java b/backend/src/main/java/com/ai/lawyer/domain/post/service/PostServiceImpl.java index 7b69ae3..2024b2e 100644 --- a/backend/src/main/java/com/ai/lawyer/domain/post/service/PostServiceImpl.java +++ b/backend/src/main/java/com/ai/lawyer/domain/post/service/PostServiceImpl.java @@ -142,7 +142,6 @@ public PostDto updatePost(Long postId, PostUpdateDto postUpdateDto) { public void deletePost(Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "삭제할 게시글을 찾을 수 없습니다.")); - // Poll도 명시적으로 삭제 (JPA cascade/orphanRemoval이 있으면 생략 가능) postRepository.delete(post); } @@ -165,8 +164,17 @@ public PostDto getMyPostById(Long postId, Long requesterMemberId) { return convertToDto(post, requesterMemberId); } + public List getMyPosts(Long requesterMemberId) { + Member member = AuthUtil.getMemberOrThrow(requesterMemberId); + List posts = postRepository.findByMember(member); + return posts.stream() + .sorted(Comparator.comparing(Post::getUpdatedAt, Comparator.nullsLast(Comparator.naturalOrder())).reversed()) + .map(post -> convertToDto(post, requesterMemberId)) + .collect(Collectors.toList()); + } + @Override - public Page getMyPosts(Pageable pageable, Long requesterMemberId) { + public Page getMyPostspaged(Pageable pageable, Long requesterMemberId) { Member member = AuthUtil.getMemberOrThrow(requesterMemberId); Page posts = postRepository.findByMember(member, pageable); return posts.map(post -> convertToDto(post, requesterMemberId)); diff --git a/backend/src/test/java/com/ai/lawyer/domain/post/controller/PostControllerTest.java b/backend/src/test/java/com/ai/lawyer/domain/post/controller/PostControllerTest.java index 0098955..3c2011f 100644 --- a/backend/src/test/java/com/ai/lawyer/domain/post/controller/PostControllerTest.java +++ b/backend/src/test/java/com/ai/lawyer/domain/post/controller/PostControllerTest.java @@ -219,8 +219,8 @@ void t10_paged() throws Exception { com.ai.lawyer.domain.post.dto.PostDto.builder().postId(1L).postName("테스트 제목").build() ); org.springframework.data.domain.PageImpl page = new org.springframework.data.domain.PageImpl<>(posts, pageable, 1); - Mockito.when(postService.getMyPosts(Mockito.any(), Mockito.anyLong())).thenReturn(page); - mockMvc.perform(get("/api/posts/my") + Mockito.when(postService.getMyPostspaged(Mockito.any(), Mockito.anyLong())).thenReturn(page); + mockMvc.perform(get("/api/posts/mypaged") .param("page", "0") .param("size", "10") .cookie(new Cookie("accessToken", "valid-access-token"))) diff --git a/backend/src/test/java/com/ai/lawyer/domain/post/service/PostServiceTest.java b/backend/src/test/java/com/ai/lawyer/domain/post/service/PostServiceTest.java index d8315ed..1341f1e 100644 --- a/backend/src/test/java/com/ai/lawyer/domain/post/service/PostServiceTest.java +++ b/backend/src/test/java/com/ai/lawyer/domain/post/service/PostServiceTest.java @@ -116,8 +116,8 @@ void t10_paged() { java.util.List postList = java.util.List.of(new PostDto()); org.springframework.data.domain.Pageable pageable = org.springframework.data.domain.PageRequest.of(0, 10); org.springframework.data.domain.PageImpl page = new org.springframework.data.domain.PageImpl<>(postList, pageable, 1); - Mockito.when(postService.getMyPosts(Mockito.eq(pageable), Mockito.eq(1L))).thenReturn(page); - var result = postService.getMyPosts(pageable, 1L); + Mockito.when(postService.getMyPostspaged(Mockito.eq(pageable), Mockito.eq(1L))).thenReturn(page); + var result = postService.getMyPostspaged(pageable, 1L); assertThat(result.getContent()).hasSize(1); assertThat(result.getTotalElements()).isEqualTo(1); assertThat(result.getTotalPages()).isEqualTo(1);