diff --git a/src/main/scala/core/contests/leetcode/service/LeetCodeScheduler.scala b/src/main/scala/core/contests/leetcode/service/LeetCodeScheduler.scala index d59bfe7..2731a1b 100644 --- a/src/main/scala/core/contests/leetcode/service/LeetCodeScheduler.scala +++ b/src/main/scala/core/contests/leetcode/service/LeetCodeScheduler.scala @@ -1,9 +1,11 @@ package core.contests.leetcode.service +import java.time.DayOfWeek import java.time.DayOfWeek.{ SATURDAY, SUNDAY } import java.util.concurrent.ScheduledFuture +import core.contests.leetcode.model.ContestType import core.contests.leetcode.model.ContestType.{ Biweekly, Weekly } import core.contests.leetcode.service.OngoingContest.{ predictCurrentBoth, @@ -18,6 +20,31 @@ import scheduler.{ HourlyJobPlan, Scheduler, WeeklyJobPlan } object LeetCodeScheduler extends Scheduler: + private val LiveRankSyncIntervalMinutes = 10 + + private def liveRankSyncJobPlans( + dayOfWeek: DayOfWeek, + startHour: Int, + startMinute: Int, + endHour: Int, + endMinute: Int, + contestType: ContestType, + ): List[WeeklyJobPlan] = + val start = startHour * 60 + startMinute + val end = endHour * 60 + endMinute + + (start to end by LiveRankSyncIntervalMinutes).map { totalMinutes => + WeeklyJobPlan( + dayOfWeek, + totalMinutes / 60, + totalMinutes % 60, + 0, + s"Live Predict Contest $contestType", + () => predictCurrent(contestType), + ) + }.toList + end liveRankSyncJobPlans + override protected def hourlyJobPlans: List[HourlyJobPlan] = List( HourlyJobPlan(1, 0, "Upsert Recent Contests", () => upsertRecentContestsAndQuestions()), @@ -36,11 +63,20 @@ object LeetCodeScheduler WeeklyJobPlan(SUNDAY, 4, 43, 0, "Predict Contest", () => predictCurrent(Weekly)), ) + val liveRankSync = liveRankSyncJobPlans( + dayOfWeek = SUNDAY, + startHour = 2, + startMinute = 35, + endHour = 3, + endMinute = 55, + contestType = Weekly, + ) + val hours = 5 to 23 val additional = hours.map { h => WeeklyJobPlan(SUNDAY, h, 0, 0, "Predict Contest", () => predictCurrentBoth()) }.toList - base ::: additional + base ::: liveRankSync ::: additional end weeklyJobPlans private def startBiweeklyJobs(): List[ScheduledFuture[?]] = @@ -54,10 +90,19 @@ object LeetCodeScheduler WeeklyJobPlan(SATURDAY, 16, 3, 0, "Predict Contest", () => predictCurrent(Biweekly)), WeeklyJobPlan(SATURDAY, 16, 23, 0, "Predict Contest", () => predictCurrent(Biweekly)), WeeklyJobPlan(SATURDAY, 16, 43, 0, "Predict Contest", () => predictCurrent(Biweekly)), - ) ::: (17 to 23).map { h => + ) + val liveRankSync = liveRankSyncJobPlans( + dayOfWeek = SATURDAY, + startHour = 14, + startMinute = 35, + endHour = 15, + endMinute = 55, + contestType = Biweekly, + ) + val hourlyAfterContest = (17 to 23).map { h => WeeklyJobPlan(SATURDAY, h, 0, 0, "Predict Contest", () => predictCurrent(Biweekly)) }.toList - startWeeklyJobs(biweeklyJobPlans) + startWeeklyJobs(biweeklyJobPlans ::: liveRankSync ::: hourlyAfterContest) end startBiweeklyJobs override def startJobs(): List[ScheduledFuture[?]] =