diff --git a/build.gradle b/build.gradle index 73402d5..ec79230 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ dependencies { // https://mvnrepository.com/artifact/io.hypersistence/hypersistence-utils-hibernate-63 implementation group: 'io.hypersistence', name: 'hypersistence-utils-hibernate-63', version: '3.9.1' - implementation 'org.jobrunr:jobrunr-spring-boot-starter:5.3.3' + implementation group: 'org.jobrunr', name: 'jobrunr-spring-boot-3-starter', version: '7.4.0' // https://mvnrepository.com/artifact/org.flywaydb/flyway-database-postgresql runtimeOnly group: 'org.flywaydb', name: 'flyway-database-postgresql', version: '11.3.1' // https://mvnrepository.com/artifact/org.postgresql/postgresql diff --git a/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java b/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java index 9188b7f..81faefe 100644 --- a/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java +++ b/src/main/java/ru/cathub/telegabot/service/impl/BookReminderScheduler.java @@ -1,10 +1,14 @@ package ru.cathub.telegabot.service.impl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jobrunr.jobs.annotations.Recurring; import org.jobrunr.scheduling.cron.Cron; -import org.jobrunr.spring.annotations.Recurring; import org.springframework.stereotype.Service; import ru.cathub.telegabot.model.BotUser; +import ru.cathub.telegabot.model.TextRole; import ru.cathub.telegabot.repository.UserRepository; +import ru.cathub.telegabot.service.OpenRouterService; import ru.cathub.telegabot.service.TelegramClientService; import ru.cathub.telegabot.utils.BookFormatUtils; @@ -13,24 +17,31 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.List; +import static ru.cathub.telegabot.utils.BookFormatUtils.escapeNonMarkdown; + @Service @RequiredArgsConstructor +@Slf4j public class BookReminderScheduler { private final UserRepository userRepository; private final TelegramClientService telegramClientService; + private final OpenRouterService openRouterService; @Recurring(cron = "0 0 18 * * *", id = "book-reminder") public void checkReadingActivity() { - Date weekAgo = Date.from(Instant.now().minus(7, ChronoUnit.DAYS)); + Date weekAgo = new Date( + Instant.now().minus(7, ChronoUnit.DAYS) + .toEpochMilli() + ); - userRepository.findUsersNeedingReminder(weekAgo) - .forEach(user -> { - String message = "πŸ“š Π’Ρ‹ Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ! ПослСдняя запись: " - + BookFormatUtils.formatDate(user.getLastReadDate()); - telegramClientService.sendMessage(user, message); - - user.setLastNotificationDate(new Date(System.currentTimeMillis())); - userRepository.save(user); - }); + for (var user : userRepository.findUsersNeedingReminder(weekAgo)) { + try { + String prompt = "ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉ ΠΊΡ€Π΅Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π°Π²Π½ΠΎ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π» ΠΊΠ½ΠΈΠ³"; + String congrat = openRouterService.getChatResponse(prompt, TextRole.DEFAULT); + telegramClientService.sendMessageWithMarkdown(user, escapeNonMarkdown(congrat)); + } catch (Exception e) { + log.error("Error sending reminder to user {}", user.getId(), e); + } + }; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 33c9d8f..289629d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -52,6 +52,9 @@ spring.datasource.password=${DB_PASSWORD} openrouter.api.key=${OPENROUTER_API_KEY} # JobRunr Configuration -jobrunr.background-job-server.enabled=true -jobrunr.dashboard.enabled=true -jobrunr.database.type=sql + +org.jobrunr.job-scheduler.enabled=true +org.jobrunr.background-job-server.enabled=true +org.jobrunr.database.type=sql +org.jobrunr.dashboard.enabled=true +org.jobrunr.database.tablePrefix=telegabot. \ No newline at end of file diff --git a/src/main/resources/db/migration/V4__add_last_not_date.sql b/src/main/resources/db/migration/V4__add_last_not_date.sql new file mode 100644 index 0000000..89c1fdb --- /dev/null +++ b/src/main/resources/db/migration/V4__add_last_not_date.sql @@ -0,0 +1,2 @@ +ο»ΏALTER TABLE bot_user + ADD last_notification_date date; \ No newline at end of file