본문 바로가기

카테고리 없음

페이징 추가

 
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);
}

 

그렇게 하면 된다.