eletrotupi / tcc/ api/src/services/dailyReminder.sync.tsc941890054e469bdf624c967e653c5c48b4fb80f
1.2 KB | 43 lines Raw
1
import { User } from "@prisma/client";
2
import { getQueue } from "@app/lib/queue/QueueRegistry";
3
import { DailyReminderJobName } from "@app/lib/queue/types";
4
import { logger } from "@app/lib/logger";
5
import { timeToCron } from "@app/utils/calc";
6

7
export async function syncDailyReminderJob(user: User): Promise<void> {
8
  logger.info({ userId: user.id }, "[daily-sync] syncing user");
9

10
  const queue = getQueue("daily-reminders");
11

12
  const existing = await queue.getRepeatableJobs();
13
  for (const job of existing) {
14
    if (job.id?.includes(`daily-reminder-user-${user.id}`)) {
15
      await queue.removeRepeatableByKey(job.key);
16
    }
17
  }
18

19
  if (!user.dailyReminderTime) {
20
    logger.info(
21
      { userId: user.id, time: user.dailyReminderTime },
22
      "[daily-sync] user skipped",
23
    );
24

25
    return;
26
  }
27

28
  const cron = timeToCron(user.dailyReminderTime);
29

30
  await queue.add(
31
    DailyReminderJobName.Send,
32
    { userId: user.id, scheduledTime: user.dailyReminderTime },
33
    {
34
      repeat: { pattern: cron, tz: "America/Sao_Paulo" },
35
      jobId: `daily-reminder-user-${user.id}`,
36
    }
37
  );
38

39
  logger.info(
40
    { userId: user.id, time: user.dailyReminderTime, cron },
41
    "[daily-sync] scheduled daily reminder",
42
  );
43
}