import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
이것과 함께
리포지터리에 할일 아이디를 통한 페이징을 위하여
Page<Comment> findByTodoId(Long todoId, Pageable pageable);
서비스엔 위는 할일 아이디 페이징, 밑은 모든 댓글 페이징
//페이징 추가
//특정 할일 페이징
public Page<Comment> getCommentsByTodoId(Long todoId, Pageable pageable) {
return commentRepository.findByTodoId(todoId, pageable);
}
//전체조회 페이징
public Page<Comment> findAllCommentsWithPagination(Pageable pageable) {
return commentRepository.findAll(pageable);
}
컨트롤러에
// 전체 댓글 조회 (페이징)
@Operation(summary = "페이징된 모든 댓글 조회")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Fetched all comments with pagination.")
})
@GetMapping
public ResponseEntity<Page<CommentResponseDto>> getPagedComments(Pageable pageable) {
Page<Comment> commentsPage = commentService.findAllCommentsWithPagination(pageable);
Page<CommentResponseDto> responseDtos = commentsPage.map(comment -> new CommentResponseDto(
comment.getCommentId(),
comment.getContent(),
comment.getUser().getId().toString(),
comment.getCreatedAt().toString()
));
return ResponseEntity.ok(responseDtos);
}
// 특정 할일에 대한 댓글 조회 (페이징)
@Operation(summary = "특정 할일에 대한 댓글 조회")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Fetched comments for the todo.")
})
@GetMapping("/todos/{todoId}")
public ResponseEntity<Page<CommentResponseDto>> getCommentsByTodoId(
@PathVariable Long todoId,
Pageable pageable) {
Page<Comment> commentsPage = commentService.getCommentsByTodoId(todoId, pageable);
Page<CommentResponseDto> responseDtos = commentsPage.map(comment -> new CommentResponseDto(
comment.getCommentId(),
comment.getContent(),
comment.getUser().getId().toString(),
comment.getCreatedAt().toString()
));
return ResponseEntity.ok(responseDtos);
}
그렇게 하면 된다.