Skip to content

Commit 92de9fe

Browse files
committed
[Feat]: 게시글 목록 페이징 기능 추가
1 parent e2d75dc commit 92de9fe

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

back/src/main/java/com/back/domain/post/controller/PostController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import com.back.domain.post.dto.PostResponse;
55
import com.back.domain.post.service.PostService;
66
import com.back.global.common.ApiResponse;
7+
import com.back.global.common.PageResponse;
78
import jakarta.validation.Valid;
89
import lombok.RequiredArgsConstructor;
10+
import org.springframework.data.domain.Page;
11+
import org.springframework.data.domain.Pageable;
912
import org.springframework.http.HttpStatus;
1013
import org.springframework.http.ResponseEntity;
1114
import org.springframework.web.bind.annotation.*;
@@ -28,14 +31,14 @@ public ApiResponse<PostResponse> createPost(
2831
@RequestBody @Valid PostRequest request) {
2932
Long userId = 1L; // fixme 임시 사용자 ID
3033
PostResponse response = postService.createPost(userId, request);
31-
return ApiResponse.success(response, "성공적으로 생성되었습니다.", HttpStatus.CREATED);
34+
return ApiResponse.success(response, "성공적으로 생성되었습니다.", HttpStatus.OK);
3235
}
3336

3437
// 게시글 목록 조회
3538
@GetMapping
36-
public ApiResponse<List<PostResponse>> getPosts() {
37-
List<PostResponse> responses = postService.getPosts();
38-
return ApiResponse.success(responses, "성공적으로 조회되었습니다.", HttpStatus.OK);
39+
public ApiResponse<PageResponse<PostResponse>> getPosts(Pageable pageable) {
40+
Page<PostResponse> responses = postService.getPosts(pageable);
41+
return ApiResponse.success(PageResponse.of(responses), "성공적으로 조회되었습니다.", HttpStatus.OK);
3942
}
4043

4144
// 게시글 단건 조회

back/src/main/java/com/back/domain/post/service/PostService.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.back.global.exception.ApiException;
1111
import com.back.global.exception.ErrorCode;
1212
import lombok.RequiredArgsConstructor;
13+
import org.springframework.data.domain.Page;
14+
import org.springframework.data.domain.Pageable;
1315
import org.springframework.stereotype.Service;
1416
import org.springframework.transaction.annotation.Transactional;
1517

@@ -46,13 +48,9 @@ public PostResponse getPost(Long postId) {
4648
.orElseThrow(() -> new ApiException(ErrorCode.POST_NOT_FOUND));
4749
}
4850

49-
public List<PostResponse> getPosts() {
50-
List<Post> posts = postRepository.findAll()
51-
.stream()
52-
.filter(post -> !post.isHide())
53-
.toList();
54-
55-
return PostMapper.toResponseList(posts);
51+
public Page<PostResponse> getPosts(Pageable pageable) {
52+
return postRepository.findAll(pageable)
53+
.map(PostMapper::toResponse);
5654
}
5755

5856
@Transactional
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.back.global.common;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.springframework.data.domain.Page;
6+
7+
import java.util.List;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
public class PageResponse<T> {
12+
private List<T> items;
13+
private int page;
14+
private int size;
15+
private long totalElements;
16+
private int totalPages;
17+
private boolean last;
18+
19+
public static <T> PageResponse<T> of(Page<T> page) {
20+
return new PageResponse<>(
21+
page.getContent(),
22+
page.getNumber() + 1, // 응답도 1페이지 시작으로 반환, Page 객체는 0페이지부터 시작
23+
page.getSize(),
24+
page.getTotalElements(),
25+
page.getTotalPages(),
26+
page.isLast()
27+
);
28+
}
29+
}

0 commit comments

Comments
 (0)