From a6971854517eebe1a7db7cf50c994df2c35fe9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=8C=E1=85=B5=E1=86=AB=E1=84=80?= =?UTF-8?q?=E1=85=B5?= <> Date: Mon, 25 Nov 2024 18:12:18 +0900 Subject: [PATCH] =?UTF-8?q?Contents=20API=20=EC=B6=94=EA=B0=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AdminContentsController.java | 7 ++- .../admin/contents/dao/AdminContentsDao.java | 52 ++++++++++++++++++- .../service/AdminContentsService.java | 5 +- .../service/AdminContentsServiceImpl.java | 7 ++- .../admin/contents/vo/ContentsListResult.java | 17 ++++++ .../contents/vo/ContentsPagingQuery.java | 24 +++++++++ .../leejk0523/javavue/model/AsaContent.java | 13 ++--- 7 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsListResult.java create mode 100644 java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsPagingQuery.java diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/controller/AdminContentsController.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/controller/AdminContentsController.java index b7337e6..63f5763 100644 --- a/java/src/main/java/com/leejk0523/javavue/admin/contents/controller/AdminContentsController.java +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/controller/AdminContentsController.java @@ -1,8 +1,11 @@ package com.leejk0523.javavue.admin.contents.controller; import com.leejk0523.javavue.admin.contents.service.AdminContentsService; +import com.leejk0523.javavue.admin.contents.vo.ContentsListResult; +import com.leejk0523.javavue.admin.contents.vo.ContentsPagingQuery; import com.leejk0523.javavue.model.AsaContent; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,8 +18,8 @@ public class AdminContentsController { private final AdminContentsService adminContentsService; @GetMapping("/api/admin/contents/contentsList") - public ResponseEntity> siteAllList() { - final var results = adminContentsService.SiteAllList(); + public ResponseEntity> findContentsList(ContentsPagingQuery query) { + final var results = adminContentsService.findContentsList(query); return ResponseEntity.ok(results); } diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/dao/AdminContentsDao.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/dao/AdminContentsDao.java index e47d507..a8b57c8 100644 --- a/java/src/main/java/com/leejk0523/javavue/admin/contents/dao/AdminContentsDao.java +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/dao/AdminContentsDao.java @@ -1,7 +1,16 @@ package com.leejk0523.javavue.admin.contents.dao; +import com.leejk0523.javavue.admin.contents.vo.ContentsListResult; +import com.leejk0523.javavue.admin.contents.vo.ContentsPagingQuery; import com.leejk0523.javavue.model.AsaContent; import com.leejk0523.javavue.model.QAsaContent; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; import org.springframework.stereotype.Repository; @@ -13,11 +22,50 @@ public class AdminContentsDao extends QuerydslRepositorySupport { super(AsaContent.class); } - public List SiteAllList() { + public Page findContentsList(ContentsPagingQuery query) { QAsaContent asaContent = QAsaContent.asaContent; - return from(asaContent) + final var offset = getOffset(query); + final var limit = getLimit(query); + final var pageable = getPageable(query); + + BooleanExpression expression = asaContent.delYn.eq("N"); + + final var list = from(asaContent) + .select( + Projections.bean( + ContentsListResult.class, + asaContent.contentId, + asaContent.contentTitle, + asaContent.orgId, + asaContent.useYn, + asaContent.frstRgtrId, + asaContent.frstRegDt, + asaContent.lastMdfrId, + asaContent.lastMdfcnDt + ) + ) + .where(expression) + .limit(limit) + .offset(offset) + .orderBy(asaContent.contentId.desc()) .fetch(); + + final var total = from(asaContent).where(expression).fetchCount(); + + return new PageImpl<>(list, pageable, total); + } + + private Pageable getPageable(ContentsPagingQuery query) { + return PageRequest.of(query.getPage() - 1, query.getSize()); + } + + private long getOffset(ContentsPagingQuery query) { + return (long) (query.getPage() - 1) * query.getSize(); + } + + private long getLimit(ContentsPagingQuery query) { + return query.getSize(); } } diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsService.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsService.java index 2240cd8..5352f62 100644 --- a/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsService.java +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsService.java @@ -1,9 +1,12 @@ package com.leejk0523.javavue.admin.contents.service; +import com.leejk0523.javavue.admin.contents.vo.ContentsListResult; +import com.leejk0523.javavue.admin.contents.vo.ContentsPagingQuery; import com.leejk0523.javavue.model.AsaContent; +import org.springframework.data.domain.Page; import java.util.List; public interface AdminContentsService { - List SiteAllList(); + Page findContentsList(ContentsPagingQuery query); } diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsServiceImpl.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsServiceImpl.java index ebe0e67..534cc41 100644 --- a/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsServiceImpl.java +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/service/AdminContentsServiceImpl.java @@ -1,8 +1,11 @@ package com.leejk0523.javavue.admin.contents.service; import com.leejk0523.javavue.admin.contents.dao.AdminContentsDao; +import com.leejk0523.javavue.admin.contents.vo.ContentsListResult; +import com.leejk0523.javavue.admin.contents.vo.ContentsPagingQuery; import com.leejk0523.javavue.model.AsaContent; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.util.List; @@ -13,7 +16,7 @@ public class AdminContentsServiceImpl implements AdminContentsService { private final AdminContentsDao adminContentsDao; @Override - public List SiteAllList() { - return adminContentsDao.SiteAllList(); + public Page findContentsList(ContentsPagingQuery query) { + return adminContentsDao.findContentsList(query); } } diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsListResult.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsListResult.java new file mode 100644 index 0000000..7eb3812 --- /dev/null +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsListResult.java @@ -0,0 +1,17 @@ +package com.leejk0523.javavue.admin.contents.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class ContentsListResult { + private Integer contentId; + private String contentTitle; + private String orgId; + private Boolean useYn; + private String frstRgtrId; + private LocalDateTime frstRegDt; + private String lastMdfrId; + private LocalDateTime lastMdfcnDt; +} diff --git a/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsPagingQuery.java b/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsPagingQuery.java new file mode 100644 index 0000000..671e428 --- /dev/null +++ b/java/src/main/java/com/leejk0523/javavue/admin/contents/vo/ContentsPagingQuery.java @@ -0,0 +1,24 @@ +package com.leejk0523.javavue.admin.contents.vo; + +import lombok.Data; +import jakarta.validation.constraints.NotNull; + +@Data +public class ContentsPagingQuery { + + @NotNull + private int page; + + @NotNull + private int size; + + private String orgId; + private String siteId; + private String keyword; + private Type type; + + public enum Type { + TITLE, + CONTENT + } +} diff --git a/java/src/main/java/com/leejk0523/javavue/model/AsaContent.java b/java/src/main/java/com/leejk0523/javavue/model/AsaContent.java index 5999d40..421ce2b 100644 --- a/java/src/main/java/com/leejk0523/javavue/model/AsaContent.java +++ b/java/src/main/java/com/leejk0523/javavue/model/AsaContent.java @@ -10,18 +10,15 @@ import java.time.LocalDateTime; @Getter @Setter @Entity -@Table(name = "asa_content") +@Table(name = "ASA_CONTENT") public class AsaContent { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @SequenceGenerator(name = "SQ_ASA_CONTENT", sequenceName = "SQ_ASA_CONTENT", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_ASA_CONTENT") @Column(name = "CONTENT_ID", nullable = false) private Integer contentId; - @Size(max = 20) - @Column(name = "SITE_ID", length = 20) - private String siteId; - @Column(name = "ORG_ID", length = 36) private String orgId; @@ -38,10 +35,10 @@ public class AsaContent { private String contentPlain; @Column(name = "USE_YN", length = 1, nullable = false) - private Boolean useYn; + private String useYn; @Column(name = "DEL_YN", length = 1, nullable = false) - private Boolean delYn; + private String delYn; @Column(name = "FRST_RGTR_ID", length = 50, nullable = false) private String frstRgtrId;