From ad906f542cce8f1936a9eef007045d93cb9df129 Mon Sep 17 00:00:00 2001 From: isprogrammingfun Date: Sun, 13 Apr 2025 13:05:29 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B3=B5=EC=A7=80/=EC=83=88=EC=86=8C?= =?UTF-8?q?=EC=8B=9D=20=EC=A1=B0=ED=9A=8C=20API=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/docs/display/DisplayInfoDocs.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/boot/api/src/main/java/com/clip/api/docs/display/DisplayInfoDocs.java b/boot/api/src/main/java/com/clip/api/docs/display/DisplayInfoDocs.java index 349e1371..13b2bd49 100644 --- a/boot/api/src/main/java/com/clip/api/docs/display/DisplayInfoDocs.java +++ b/boot/api/src/main/java/com/clip/api/docs/display/DisplayInfoDocs.java @@ -1,6 +1,7 @@ package com.clip.api.docs.display; import com.clip.api.display.controller.dto.BannerInfoDto; +import com.clip.api.display.controller.dto.NoticeInfoDto; import com.clip.notice.entity.BannerType; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -35,5 +36,23 @@ public interface DisplayInfoDocs { @GetMapping("/banners/{bannerType}") List getBanners(@PathVariable final BannerType bannerType); + @Operation( + summary = "공지/새소식 조회 API", + description = """ + - 홈화면 스낵바에 있는 공지/새소식 조회 API입니다. + - 공지/새소식은 NOTICE, ARTICLE 으로 구분됩니다. + """ + ) + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = NoticeInfoDto.class) + ) + ) + @GetMapping("/notices") + List getNotices(); + } From a04b19f81621263036d3e2e3af3067532615b2f9 Mon Sep 17 00:00:00 2001 From: isprogrammingfun Date: Sun, 13 Apr 2025 13:05:55 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EA=B3=B5=EC=A7=80/=EC=83=88=EC=86=8C?= =?UTF-8?q?=EC=8B=9D=20=EC=A1=B0=ED=9A=8C=20API=20controller,=20dto=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DisplayInfoController.java | 6 ++++++ .../display/controller/dto/NoticeInfoDto.java | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 boot/api/src/main/java/com/clip/api/display/controller/dto/NoticeInfoDto.java diff --git a/boot/api/src/main/java/com/clip/api/display/controller/DisplayInfoController.java b/boot/api/src/main/java/com/clip/api/display/controller/DisplayInfoController.java index fe5bf391..360e22c8 100644 --- a/boot/api/src/main/java/com/clip/api/display/controller/DisplayInfoController.java +++ b/boot/api/src/main/java/com/clip/api/display/controller/DisplayInfoController.java @@ -1,6 +1,7 @@ package com.clip.api.display.controller; import com.clip.api.display.controller.dto.BannerInfoDto; +import com.clip.api.display.controller.dto.NoticeInfoDto; import com.clip.api.display.service.DisplayInfoService; import com.clip.api.docs.display.DisplayInfoDocs; import com.clip.notice.entity.BannerType; @@ -18,4 +19,9 @@ public class DisplayInfoController implements DisplayInfoDocs { public List getBanners(final BannerType bannerType) { return displayInfoService.getBanners(bannerType); } + + @Override + public List getNotices() { + return displayInfoService.getNotices(); + } } diff --git a/boot/api/src/main/java/com/clip/api/display/controller/dto/NoticeInfoDto.java b/boot/api/src/main/java/com/clip/api/display/controller/dto/NoticeInfoDto.java new file mode 100644 index 00000000..1b9571b8 --- /dev/null +++ b/boot/api/src/main/java/com/clip/api/display/controller/dto/NoticeInfoDto.java @@ -0,0 +1,21 @@ +package com.clip.api.display.controller.dto; + +import com.clip.notice.entity.NoticeType; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class NoticeInfoDto { + private NoticeType noticeType; + private String content; + private String link; + + @Builder + public NoticeInfoDto(NoticeType noticeType, String content, String link) { + this.noticeType = noticeType; + this.content = content; + this.link = link; + } +} From be825ae1a880a0e035ce691b4925485b8648534e Mon Sep 17 00:00:00 2001 From: isprogrammingfun Date: Sun, 13 Apr 2025 13:06:08 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EA=B3=B5=EC=A7=80/=EC=83=88=EC=86=8C?= =?UTF-8?q?=EC=8B=9D=20=EC=A1=B0=ED=9A=8C=20API=20service=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/display/service/DisplayInfoService.java | 13 +++++++++++++ .../clip/notice/repository/NoticeRepository.java | 11 +++++++++++ .../com/clip/notice/service/NoticeDataService.java | 7 +++++++ 3 files changed, 31 insertions(+) diff --git a/boot/api/src/main/java/com/clip/api/display/service/DisplayInfoService.java b/boot/api/src/main/java/com/clip/api/display/service/DisplayInfoService.java index 9c656b8a..89fd6ceb 100644 --- a/boot/api/src/main/java/com/clip/api/display/service/DisplayInfoService.java +++ b/boot/api/src/main/java/com/clip/api/display/service/DisplayInfoService.java @@ -1,10 +1,12 @@ package com.clip.api.display.service; import com.clip.api.display.controller.dto.BannerInfoDto; +import com.clip.api.display.controller.dto.NoticeInfoDto; import com.clip.infra.aws.s3.S3ImgService; import com.clip.notice.entity.Banner; import com.clip.notice.entity.BannerType; import com.clip.notice.service.BannerDataService; +import com.clip.notice.service.NoticeDataService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -14,6 +16,7 @@ @RequiredArgsConstructor public class DisplayInfoService { private final BannerDataService bannerDataService; + private final NoticeDataService noticeDataService; private final S3ImgService s3ImgService; public List getBanners(final BannerType bannerType) { @@ -27,4 +30,14 @@ public List getBanners(final BannerType bannerType) { .toList(); } + public List getNotices() { + return noticeDataService.findNotices().stream() + .map(notice -> NoticeInfoDto.builder() + .noticeType(notice.getNoticeType()) + .content(notice.getContent()) + .link(notice.getLink()) + .build()) + .toList(); + } + } diff --git a/data/office-data/src/main/java/com/clip/notice/repository/NoticeRepository.java b/data/office-data/src/main/java/com/clip/notice/repository/NoticeRepository.java index c809cfe4..731887b7 100644 --- a/data/office-data/src/main/java/com/clip/notice/repository/NoticeRepository.java +++ b/data/office-data/src/main/java/com/clip/notice/repository/NoticeRepository.java @@ -7,6 +7,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; +import java.util.List; import java.util.Optional; public interface NoticeRepository extends JpaRepository { @@ -19,4 +21,13 @@ public interface NoticeRepository extends JpaRepository { @Query("select n from Notice n where n.id = :noticeId") Optional findNotice(Long noticeId); + @Query(""" + select n from Notice n + where n.exposureDate <= :exposureDate + and n.isExposure = true + order by n.exposureDate desc + limit 3 + """) + List findAllNotices(@Param("exposureDate") LocalDate exposureDate); + } diff --git a/data/office-data/src/main/java/com/clip/notice/service/NoticeDataService.java b/data/office-data/src/main/java/com/clip/notice/service/NoticeDataService.java index 8bb1c464..c4509f0f 100644 --- a/data/office-data/src/main/java/com/clip/notice/service/NoticeDataService.java +++ b/data/office-data/src/main/java/com/clip/notice/service/NoticeDataService.java @@ -6,6 +6,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.util.List; + @Service @RequiredArgsConstructor public class NoticeDataService { @@ -24,4 +27,8 @@ public Notice save(Notice notice) { public void deleteNotice(Long noticeId) { noticeRepository.deleteNotice(noticeId); } + + public List findNotices() { + return noticeRepository.findAllNotices(LocalDate.now()); + } }