-
Notifications
You must be signed in to change notification settings - Fork 2
[Fix] 하루 요약 알림 전송되지 않는 문제 발생 해결 #242
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -84,6 +84,40 @@ public SummaryDiary summarize(DiarySummaryRequestDTO.SummarizeDTO request) { | |||||
| return summaryDiary; | ||||||
| } | ||||||
|
|
||||||
| @Override | ||||||
| public SummaryDiary summarizeByDailySummaryAlarm(Long userId, DiarySummaryRequestDTO.SummarizeDTO request) { | ||||||
| Users user = userRepository.findById(userId).orElse(null); | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| LocalDate day = request.getDate(); | ||||||
|
|
||||||
| LocalDateTime todayStart = day.atStartOfDay(); | ||||||
| LocalDateTime todayEnd = day.atTime(LocalTime.MAX); | ||||||
|
|
||||||
| List<Diaries> diaries = diaryRepository.findAllByUserIdAndDate(user, todayStart, todayEnd); | ||||||
| String prompt = PromptBuilder.buildPrompt(diaries); | ||||||
|
|
||||||
| ChatGPTRequestDTO gptRequest = new ChatGPTRequestDTO(model, prompt); | ||||||
| ChatGPTResponseDTO responseDTO = restTemplate.postForObject(apiUrl, gptRequest, ChatGPTResponseDTO.class); | ||||||
|
|
||||||
| String content = responseDTO.getChoices().get(0).getMessage().getContent(); | ||||||
|
|
||||||
| String rawKey = diaries.stream() | ||||||
| .map(d -> d.getId() + ":" + d.getUpdatedAt().toString()) | ||||||
| .sorted() | ||||||
| .collect(Collectors.joining(",")); | ||||||
|
|
||||||
| String diaryKeyHash = generateSHA256(rawKey); | ||||||
|
|
||||||
| SummaryDiary summaryDiary = SummaryDiary.builder() | ||||||
| .date(day) | ||||||
| .content(content) | ||||||
| .users(user) | ||||||
| .diaryKeyHash(diaryKeyHash) | ||||||
| .build(); | ||||||
|
|
||||||
| summaryDiaryRepository.save(summaryDiary); | ||||||
| return summaryDiary; | ||||||
| } | ||||||
|
Comment on lines
+87
to
+119
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 새로 추가된 @Override
public SummaryDiary summarize(DiarySummaryRequestDTO.SummarizeDTO request) {
Long userId = SecurityUtil.getCurrentUserId();
Users user = userRepository.findById(userId)
.orElseThrow(() -> new ExceptionHandler(ErrorStatus.USER_NOT_FOUND));
return createSummaryForUser(user, request.getDate());
}
@Override
public SummaryDiary summarizeByDailySummaryAlarm(Long userId, DiarySummaryRequestDTO.SummarizeDTO request) {
Users user = userRepository.findById(userId)
.orElseThrow(() -> new ExceptionHandler(ErrorStatus.USER_NOT_FOUND));
return createSummaryForUser(user, request.getDate());
}
private SummaryDiary createSummaryForUser(Users user, LocalDate day) {
// ... 공통 요약 생성 로직 ...
}이렇게 하면 코드의 재사용성이 높아지고 유지보수가 용이해집니다. |
||||||
|
|
||||||
| @Override | ||||||
| public SummaryDiary reSummarize(DiarySummaryRequestDTO.SummarizeDTO request) { | ||||||
| Long userId = SecurityUtil.getCurrentUserId(); | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,60 +1,60 @@ | ||
| package TtattaBackend.ttatta.service.OpenAiService; | ||
|
|
||
| import TtattaBackend.ttatta.domain.DailySummaryAlarm; | ||
| import TtattaBackend.ttatta.domain.Diaries; | ||
| import TtattaBackend.ttatta.repository.DailySummaryAlarmRepository; | ||
| import TtattaBackend.ttatta.repository.DiaryRepository; | ||
| import TtattaBackend.ttatta.web.dto.DiarySummaryRequestDTO; | ||
| import lombok.RequiredArgsConstructor; | ||
| import lombok.extern.slf4j.Slf4j; | ||
| import org.springframework.scheduling.annotation.Scheduled; | ||
| import org.springframework.stereotype.Service; | ||
|
|
||
| import java.time.LocalDate; | ||
| import java.time.LocalDateTime; | ||
| import java.time.LocalTime; | ||
| import java.util.List; | ||
|
|
||
| @Service | ||
| @Slf4j | ||
| @RequiredArgsConstructor | ||
| public class SummaryDiaryBatchService { | ||
| private final DailySummaryAlarmRepository dailySummaryAlarmRepository; | ||
| private final SummaryCommandService summaryCommandService; | ||
| private final DiaryRepository diaryRepository; | ||
| @Scheduled(cron = "0 * * * * *") | ||
| public void processDailySummaryDiary() { | ||
| LocalTime currentTime = LocalTime.now().withSecond(0).withNano(0); | ||
|
|
||
| List<DailySummaryAlarm> alarms = dailySummaryAlarmRepository.findByAlarmTime(currentTime); | ||
| for (DailySummaryAlarm alarm : alarms) { | ||
| try { | ||
| LocalDate today = LocalDate.now(); | ||
| LocalDateTime todayStart = today.atStartOfDay(); | ||
| LocalDateTime todayEnd = today.plusDays(1).atStartOfDay(); | ||
| List<Diaries> todayDiaries = diaryRepository.findAllByUserIdAndDate( | ||
| alarm.getUsers(), todayStart, todayEnd); | ||
| if (todayDiaries.size() < 2) { | ||
| log.info("요약 건너뜀 - 사용자 ID: {}, 오늘 일기 수: {}", | ||
| alarm.getUsers().getId(), todayDiaries.size()); | ||
| continue; | ||
| } | ||
| DiarySummaryRequestDTO.SummarizeDTO request = DiarySummaryRequestDTO.SummarizeDTO.builder() | ||
| .date(today) | ||
| .build(); | ||
| summaryCommandService.summarize(request); | ||
| log.info("자동 요약 완료 - 사용자 ID: {}, 알람 시간: {}", | ||
| alarm.getUsers().getId(), alarm.getAlarmTime()); | ||
| } catch (Exception e) { | ||
| log.error("자동 요약 실패 - 사용자 ID: {}, 에러: {}", | ||
| alarm.getUsers().getId(), e.getMessage()); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| //package TtattaBackend.ttatta.service.OpenAiService; | ||
| // | ||
| //import TtattaBackend.ttatta.domain.DailySummaryAlarm; | ||
| //import TtattaBackend.ttatta.domain.Diaries; | ||
| //import TtattaBackend.ttatta.repository.DailySummaryAlarmRepository; | ||
| //import TtattaBackend.ttatta.repository.DiaryRepository; | ||
| //import TtattaBackend.ttatta.web.dto.DiarySummaryRequestDTO; | ||
| //import lombok.RequiredArgsConstructor; | ||
| //import lombok.extern.slf4j.Slf4j; | ||
| //import org.springframework.scheduling.annotation.Scheduled; | ||
| //import org.springframework.stereotype.Service; | ||
| // | ||
| //import java.time.LocalDate; | ||
| //import java.time.LocalDateTime; | ||
| //import java.time.LocalTime; | ||
| //import java.util.List; | ||
| // | ||
| //@Service | ||
| //@Slf4j | ||
| //@RequiredArgsConstructor | ||
| //public class SummaryDiaryBatchService { | ||
| // private final DailySummaryAlarmRepository dailySummaryAlarmRepository; | ||
| // private final SummaryCommandService summaryCommandService; | ||
| // private final DiaryRepository diaryRepository; | ||
| // | ||
| // @Scheduled(cron = "0 * * * * *") | ||
| // public void processDailySummaryDiary() { | ||
| // LocalTime currentTime = LocalTime.now().withSecond(0).withNano(0); | ||
| // | ||
| // List<DailySummaryAlarm> alarms = dailySummaryAlarmRepository.findByAlarmTime(currentTime); | ||
| // | ||
| // for (DailySummaryAlarm alarm : alarms) { | ||
| // try { | ||
| // LocalDate today = LocalDate.now(); | ||
| // LocalDateTime todayStart = today.atStartOfDay(); | ||
| // LocalDateTime todayEnd = today.plusDays(1).atStartOfDay(); | ||
| // | ||
| // List<Diaries> todayDiaries = diaryRepository.findAllByUserIdAndDate( | ||
| // alarm.getUsers(), todayStart, todayEnd); | ||
| // | ||
| // if (todayDiaries.size() < 2) { | ||
| // log.info("요약 건너뜀 - 사용자 ID: {}, 오늘 일기 수: {}", | ||
| // alarm.getUsers().getId(), todayDiaries.size()); | ||
| // continue; | ||
| // } | ||
| // | ||
| // DiarySummaryRequestDTO.SummarizeDTO request = DiarySummaryRequestDTO.SummarizeDTO.builder() | ||
| // .date(today) | ||
| // .build(); | ||
| // | ||
| // summaryCommandService.summarize(request); | ||
| // log.info("자동 요약 완료 - 사용자 ID: {}, 알람 시간: {}", | ||
| // alarm.getUsers().getId(), alarm.getAlarmTime()); | ||
| // } catch (Exception e) { | ||
| // log.error("자동 요약 실패 - 사용자 ID: {}, 에러: {}", | ||
| // alarm.getUsers().getId(), e.getMessage()); | ||
| // } | ||
| // } | ||
| // } | ||
| //} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
디버깅 목적으로 추가된
System.out.println구문이 코드에 남아있습니다. 프로덕션 코드에는 이러한 출력문이 포함되지 않는 것이 좋습니다. 로깅이 필요하다면, 다른 서비스 클래스에서처럼@Slf4j어노테이션과 로거를 사용해주세요.