From ea4b7868a46a8b82e85c5764fab9cab33851f283 Mon Sep 17 00:00:00 2001 From: daumi125 Date: Tue, 15 Jul 2025 17:48:18 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20[=EA=B8=B0=EB=8A=A5=EC=B6=94?= =?UTF-8?q?=EA=B0=80]=20=EC=85=8B=ED=8C=85=EA=B0=92=EC=9D=84=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=99=80=EC=84=9C=20cron=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [기능추가] 셋팅값을 가져와서 cron으로 변환하는 메서드 추가 --- ...stController.java => KakaoController.java} | 13 ++-- .../Kakao/service/KakaoSchedulerService.java | 75 +++++++++++++++++++ 2 files changed, 82 insertions(+), 6 deletions(-) rename SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/{KakaoTestController.java => KakaoController.java} (86%) create mode 100644 SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/service/KakaoSchedulerService.java diff --git a/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoTestController.java b/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoController.java similarity index 86% rename from SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoTestController.java rename to SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoController.java index 72ea9d9..2818820 100644 --- a/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoTestController.java +++ b/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/controller/KakaoController.java @@ -1,29 +1,26 @@ package Baemin.News_Deliver.Domain.Kakao.controller; -import Baemin.News_Deliver.Domain.Auth.Entity.Auth; -import Baemin.News_Deliver.Domain.Auth.Repository.AuthRepository; import Baemin.News_Deliver.Domain.Kakao.service.KakaoMessageService; import Baemin.News_Deliver.Domain.Kakao.service.KakaoNewsService; -import Baemin.News_Deliver.Global.Kakao.KakaoTokenProvider; +import Baemin.News_Deliver.Domain.Kakao.service.KakaoSchedulerService; import Baemin.News_Deliver.Global.News.ElasticSearch.dto.NewsEsDocument; import Baemin.News_Deliver.Global.ResponseObject.ApiResponseWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Map; @RestController @RequiredArgsConstructor @Slf4j @RequestMapping("/kakao") -public class KakaoTestController { +public class KakaoController { private final KakaoMessageService kakaoMessageService; private final KakaoNewsService newsSearchService; + private final KakaoSchedulerService kakaoSchedulerService; /** * 카카오톡 나에게 보내기 메시지 전송 메서드 @@ -57,4 +54,8 @@ public ResponseEntity> searchNews() { return ResponseEntity.ok(newsSearchService.searchNews(keyword, blockKeyword)); } + @GetMapping("/getcron") + public ResponseEntity getcron() { + return ResponseEntity.ok(kakaoSchedulerService.getCron()); + } } \ No newline at end of file diff --git a/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/service/KakaoSchedulerService.java b/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/service/KakaoSchedulerService.java new file mode 100644 index 0000000..24dfce4 --- /dev/null +++ b/SpringBoot/src/main/java/Baemin/News_Deliver/Domain/Kakao/service/KakaoSchedulerService.java @@ -0,0 +1,75 @@ +package Baemin.News_Deliver.Domain.Kakao.service; + +import Baemin.News_Deliver.Domain.Mypage.DTO.SettingDTO; +import Baemin.News_Deliver.Domain.Mypage.Repository.SettingRepository; +import Baemin.News_Deliver.Domain.Mypage.service.SettingService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Slf4j +public class KakaoSchedulerService { + + private final SettingService settingService; + + //1(월)~7(일)로 매핑 + private static final Map DAY_MAP = Map.of( + 1, "MON", + 2, "TUE", + 3, "WED", + 4, "THU", + 5, "FRI", + 6, "SAT", + 7, "SUN" + ); + + public List getCron() { + Long userId = 1L; + List settings = settingService.getAllSettingsByUserId(userId); + + List crons = new ArrayList<>(); + + for (SettingDTO setting : settings) { + // 1. deliveryTime, days 가져오기 + String deliveryTime = setting.getDeliveryTime().toString(); + List days = setting.getDays(); + + // 2. 로그 출력 + log.info("deliveryTime: {}", deliveryTime); + log.info("days: {}", days); + + // 3. 크론 표현식 생성 + String cron = toCron(deliveryTime, days); + log.info("생성된 Cron 표현식: {}", cron); + + crons.add(cron); + } + + return crons; + } + + private String toCron(String deliveryTimeStr, List days) { + LocalDateTime deliveryTime = LocalDateTime.parse(deliveryTimeStr); + + int hour = deliveryTime.getHour(); + int minute = deliveryTime.getMinute(); + + String cronDays = days.stream() + .map(DAY_MAP::get) + .filter(Objects::nonNull) + .collect(Collectors.joining(",")); + + return String.format("0 %d %d ? * %s", minute, hour, cronDays); + } + + +}