diff --git a/src/main/java/com/earseo/core/controller/NoticeController.java b/src/main/java/com/earseo/core/controller/NoticeController.java index f57abde..0252a87 100644 --- a/src/main/java/com/earseo/core/controller/NoticeController.java +++ b/src/main/java/com/earseo/core/controller/NoticeController.java @@ -3,15 +3,14 @@ import com.earseo.core.common.BaseResponse; import com.earseo.core.dto.request.NoticeCreateRequest; import com.earseo.core.dto.request.NoticeUpdateRequest; +import com.earseo.core.dto.request.PageableRequest; import com.earseo.core.dto.response.NoticeDeleteResponse; import com.earseo.core.dto.response.NoticePageResponse; import com.earseo.core.dto.response.NoticeResponse; import com.earseo.core.service.NoticeService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -30,10 +29,10 @@ public ResponseEntity> getNotice( @GetMapping("/api/core/notice") public ResponseEntity> getNoticeList( - @PageableDefault(size = 10, sort = "id", direction = Sort.Direction.DESC) - Pageable pageable + @ParameterObject + PageableRequest pageableRequest ) { - return ResponseEntity.ok(BaseResponse.ok(noticeService.getNoticeList(pageable))); + return ResponseEntity.ok(BaseResponse.ok(noticeService.getNoticeList(pageableRequest.toPageable()))); } @PostMapping("/api/admin/core/notice") diff --git a/src/main/java/com/earseo/core/dto/etl/NoticePageItem.java b/src/main/java/com/earseo/core/dto/etl/NoticePageItem.java index 930a95d..50d0303 100644 --- a/src/main/java/com/earseo/core/dto/etl/NoticePageItem.java +++ b/src/main/java/com/earseo/core/dto/etl/NoticePageItem.java @@ -1,7 +1,15 @@ package com.earseo.core.dto.etl; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.time.LocalDateTime; + public record NoticePageItem( Long noticeId, - String title + String title, + @JsonFormat(pattern = "yyyy/MM/dd") + LocalDateTime createdAt, + @JsonFormat(pattern = "yyyy/MM/dd") + LocalDateTime updatedAt ) { } diff --git a/src/main/java/com/earseo/core/dto/request/PageableRequest.java b/src/main/java/com/earseo/core/dto/request/PageableRequest.java new file mode 100644 index 0000000..c500e36 --- /dev/null +++ b/src/main/java/com/earseo/core/dto/request/PageableRequest.java @@ -0,0 +1,33 @@ +package com.earseo.core.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +@Getter +public class PageableRequest{ + @Schema(description = "페이지 번호 (0부터 시작)", example = "0", defaultValue = "0") + private int page = 0; + + @Schema(description = "페이지 크기", example = "10", defaultValue = "10") + private int size = 10; + + @Schema( + description = "정렬 기준", + example = "id,desc", + allowableValues = {"id,desc, id,asc"} + ) + private String sort = "id,desc"; + + public Pageable toPageable() { + String[] sortParts = sort.split(","); + String property = sortParts[0]; + Sort.Direction direction = sortParts.length > 1 + ? Sort.Direction.fromString(sortParts[1]) + : Sort.Direction.DESC; + + return PageRequest.of(page, size, Sort.by(direction, property)); + } +} diff --git a/src/main/java/com/earseo/core/repository/NoticeRepository.java b/src/main/java/com/earseo/core/repository/NoticeRepository.java index ccc01cd..3f4b956 100644 --- a/src/main/java/com/earseo/core/repository/NoticeRepository.java +++ b/src/main/java/com/earseo/core/repository/NoticeRepository.java @@ -9,6 +9,6 @@ public interface NoticeRepository extends JpaRepository { - @Query("SELECT new com.earseo.core.dto.etl.NoticePageItem(n.id, n.title) FROM Notice n") + @Query("SELECT new com.earseo.core.dto.etl.NoticePageItem(n.id, n.title, n.createdAt, n.updatedAt) FROM Notice n") Slice findNoticeList(Pageable pageable); }