From 7e35793572d09a5998de0483dfed689119e4d3c6 Mon Sep 17 00:00:00 2001 From: ryan-dia Date: Sun, 19 Jan 2025 15:25:43 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EA=B0=80=201=EB=B6=80=ED=84=B0=20=EC=8B=9C=EC=9E=91=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AnnouncementController.java | 27 +++++++++++++++---- .../v1/announcement/dto/CustomPageDTO.java | 2 +- .../api/v1/announcement/dto/OneBasedPage.java | 19 +++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 src/main/java/run/attraction/api/v1/announcement/dto/OneBasedPage.java diff --git a/src/main/java/run/attraction/api/v1/announcement/controller/AnnouncementController.java b/src/main/java/run/attraction/api/v1/announcement/controller/AnnouncementController.java index e9fe4ed..11b68f7 100644 --- a/src/main/java/run/attraction/api/v1/announcement/controller/AnnouncementController.java +++ b/src/main/java/run/attraction/api/v1/announcement/controller/AnnouncementController.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import java.util.List; +import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import run.attraction.api.v1.announcement.PostCategory; import run.attraction.api.v1.announcement.dto.CustomPageDTO; +import run.attraction.api.v1.announcement.dto.OneBasedPage; import run.attraction.api.v1.announcement.dto.PostDTO; import run.attraction.api.v1.announcement.dto.PostSummaryDTO; import run.attraction.api.v1.announcement.dto.request.PostCreateRequestDTO; @@ -74,18 +76,33 @@ public ApiResponse updatePost(@PathVariable Long postId, @RequestBody Upda @GetMapping @Operation(summary = "고정되지 않은 모든 게시물 가져오기", description = "고정되지 않은 모든 게시물을 가져오는 로직입니다.") public ApiResponse> getPosts( - @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size, @RequestParam(required = false) String category ) { - Pageable pageable = PageRequest.of(page, size); + Pageable pageable = createPageable(page, size); final Page posts = announcementService.findPosts(pageable, category); - CustomPageDTO customPage = new CustomPageDTO<>(posts, PostCategory.find(category)); + CustomPageDTO customPage = new CustomPageDTO<>(posts, resolvePostCategory(category)); return ApiResponse.from(HttpStatus.OK, "성공", customPage); } + private Pageable createPageable(int page, int size) { + if (page < 1) { + throw new IllegalArgumentException("페이지 번호는 1 이상이어야 합니다."); + } + + return PageRequest.of(page - 1, size); + } + + private PostCategory resolvePostCategory(String category) { + if (Objects.isNull(category)) { + return null; + } + return PostCategory.find(category); + } + @GetMapping("/pinned") @Operation(summary = "고정된 모든 게시물 가져오기", description = "고정된 모든 게시물을 가져오는 로직입니다.") public ApiResponse> getPinnedPosts() { @@ -96,11 +113,11 @@ public ApiResponse> getPinnedPosts() { @GetMapping("/search") @Operation(summary = "게시물 검색", description = "검색 타입(제목/내용/제목+내용)에 맞는 게시물을 검색해주는 로직") - public ApiResponse> searchPosts(@ModelAttribute PostSearchRequest request + public ApiResponse> searchPosts(@ModelAttribute PostSearchRequest request ) { Pageable pageable = PageRequest.of(request.page(), request.size()); final Page posts = announcementService.findPostsBySearchQuery(pageable, request); - return ApiResponse.from(HttpStatus.OK, "성공", posts); + return ApiResponse.from(HttpStatus.OK, "성공", OneBasedPage.of(posts)); } } diff --git a/src/main/java/run/attraction/api/v1/announcement/dto/CustomPageDTO.java b/src/main/java/run/attraction/api/v1/announcement/dto/CustomPageDTO.java index f2a6a69..bbce017 100644 --- a/src/main/java/run/attraction/api/v1/announcement/dto/CustomPageDTO.java +++ b/src/main/java/run/attraction/api/v1/announcement/dto/CustomPageDTO.java @@ -22,7 +22,7 @@ public CustomPageDTO(Page page, PostCategory category) { page.isFirst(), page.isLast(), page.getSize(), - page.getNumber(), + page.getNumber() + 1, category, page.getContent() ); diff --git a/src/main/java/run/attraction/api/v1/announcement/dto/OneBasedPage.java b/src/main/java/run/attraction/api/v1/announcement/dto/OneBasedPage.java new file mode 100644 index 0000000..ce381ec --- /dev/null +++ b/src/main/java/run/attraction/api/v1/announcement/dto/OneBasedPage.java @@ -0,0 +1,19 @@ +package run.attraction.api.v1.announcement.dto; + +import java.util.List; +import org.springframework.data.domain.Page; + +public record OneBasedPage( + List content, + int totalPages, + int currentPage, + long totalElements +) { + public OneBasedPage(Page page) { + this(page.getContent(), page.getTotalPages(), page.getNumber() + 1, page.getTotalElements()); + } + + public static OneBasedPage of(Page page) { + return new OneBasedPage<>(page); + } +} From 5419c2bff2c0479ae4421baf8d2a103298e431f0 Mon Sep 17 00:00:00 2001 From: ryan-dia Date: Sun, 19 Jan 2025 15:28:30 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EA=B0=92=EC=9D=84=201=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/announcement/dto/request/PostSearchRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/run/attraction/api/v1/announcement/dto/request/PostSearchRequest.java b/src/main/java/run/attraction/api/v1/announcement/dto/request/PostSearchRequest.java index 0b7c54c..7e8d74d 100644 --- a/src/main/java/run/attraction/api/v1/announcement/dto/request/PostSearchRequest.java +++ b/src/main/java/run/attraction/api/v1/announcement/dto/request/PostSearchRequest.java @@ -7,8 +7,8 @@ public record PostSearchRequest( Integer size ) { public PostSearchRequest { - if (page == null || page < 0) { - page = 0; + if (page == null || page < 1) { + page = 1; } if (size == null || size <= 0) { size = 3;