dev1/backend/jobs/reminderCron.js
2025-08-21 16:45:02 +00:00

42 lines
1.1 KiB
JavaScript

// backend/jobs/reminderCron.js
import cron from 'node-cron';
import pool from '../config/mysqlPool.js';
import { sendSMS } from '../utils/smsService.js';
const BATCH_SIZE = 25;
/* Every minute */
cron.schedule('*/1 * * * *', async () => {
try {
// IMPORTANT: use execute() so the param is truly bound
const sql = `
SELECT id,
phone_e164 AS toNumber,
message_body AS body
FROM reminders
WHERE status = 'pending'
AND send_at_utc <= UTC_TIMESTAMP()
ORDER BY send_at_utc ASC
LIMIT ${BATCH_SIZE}
`;
const [rows] = await pool.query(sql);
if (!rows.length) return;
let sent = 0, failed = 0;
for (const r of rows) {
try {
await sendSMS({ reminderId: r.id, to: r.toNumber, body: r.body });
sent++;
} catch (err) {
console.error('[reminderCron] Twilio error:', err?.message || err);
failed++;
}
}
console.log(`[reminderCron] processed ${rows.length}: ${sent} sent, ${failed} failed`);
} catch (err) {
console.error('[reminderCron] DB error:', err);
}
});