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); + } + + +}