Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;

/**
* 카카오톡 나에게 보내기 메시지 전송 메서드
Expand Down Expand Up @@ -57,4 +54,8 @@ public ResponseEntity<List<NewsEsDocument>> searchNews() {
return ResponseEntity.ok(newsSearchService.searchNews(keyword, blockKeyword));
}

@GetMapping("/getcron")
public ResponseEntity getcron() {
return ResponseEntity.ok(kakaoSchedulerService.getCron());
}
}
Original file line number Diff line number Diff line change
@@ -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<Integer, String> DAY_MAP = Map.of(
1, "MON",
2, "TUE",
3, "WED",
4, "THU",
5, "FRI",
6, "SAT",
7, "SUN"
);

public List<String> getCron() {
Long userId = 1L;
List<SettingDTO> settings = settingService.getAllSettingsByUserId(userId);

List<String> crons = new ArrayList<>();

for (SettingDTO setting : settings) {
// 1. deliveryTime, days 가져오기
String deliveryTime = setting.getDeliveryTime().toString();
List<Integer> 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<Integer> 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);
}


}