changed weight reminder schedule
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Queue } from 'bullmq';
|
||||
import { getReminderDate } from '../reminders/reminderDate.js';
|
||||
import { redisConnection } from './redisConnection.js';
|
||||
|
||||
export const weightReminderQueueName = 'weight-reminders';
|
||||
@@ -12,15 +13,30 @@ export const weightReminderQueue = new Queue(weightReminderQueueName, {
|
||||
},
|
||||
});
|
||||
|
||||
export const enqueueDailyWeightReminder = (now = new Date()) => {
|
||||
const runDate = getReminderDate(now);
|
||||
return weightReminderQueue.add('check-overdue-weights', { runDate }, {
|
||||
jobId: `weight-reminders-${runDate}`,
|
||||
});
|
||||
};
|
||||
|
||||
export const startWeightReminderScheduler = async () => {
|
||||
if (process.env.WEIGHT_REMINDERS_ENABLED === 'false') {
|
||||
await weightReminderQueue.removeJobScheduler('weight-reminders');
|
||||
return;
|
||||
}
|
||||
// Remove the previous five-minute schedule during upgrades and when disabled.
|
||||
await weightReminderQueue.removeJobScheduler('weight-reminders');
|
||||
if (process.env.WEIGHT_REMINDERS_ENABLED === 'false') return () => {};
|
||||
await weightReminderQueue.setGlobalConcurrency(1);
|
||||
await weightReminderQueue.upsertJobScheduler(
|
||||
'weight-reminders',
|
||||
{ every: 5 * 60_000 },
|
||||
{ name: 'check-overdue-weights', data: {} },
|
||||
);
|
||||
let lastRunDate = '';
|
||||
const runIfNeeded = async () => {
|
||||
const now = new Date();
|
||||
const runDate = getReminderDate(now);
|
||||
if (lastRunDate === runDate) return;
|
||||
await enqueueDailyWeightReminder(now);
|
||||
lastRunDate = runDate;
|
||||
};
|
||||
const check = () => {
|
||||
void runIfNeeded().catch(error => console.error('Weight reminder scheduler failed', error));
|
||||
};
|
||||
const startup = setTimeout(check, 15_000);
|
||||
const interval = setInterval(check, 60 * 60_000);
|
||||
return () => { clearTimeout(startup); clearInterval(interval); };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user