feat(cron): daily sync.source_doc enqueue

node-cron schedules runSync at 03:00 local time; runSync enqueues
sync.source_doc for every source_docs row with sync_source='url'.
Started from server.js's CLI gate alongside the job queue.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-01 10:14:07 +10:00
parent 8fa7f71694
commit 13fac102dd
6 changed files with 107 additions and 2 deletions

16
lib/cron/index.js Normal file
View File

@@ -0,0 +1,16 @@
import cron from 'node-cron';
import { runSync } from './sync_source_docs.js';
import { log } from '../log.js';
export function startCron() {
// Daily at 03:00 local time
cron.schedule('0 3 * * *', async () => {
try {
const n = await runSync();
log.info({ enqueued: n }, 'cron sync.source_doc complete');
} catch (e) {
log.error({ err: e }, 'cron sync.source_doc failed');
}
});
log.info('cron started');
}

View File

@@ -0,0 +1,12 @@
import { pool } from '../db/pool.js';
import * as queue from '../jobs/queue.js';
export async function runSync() {
const { rows } = await pool.query(
`SELECT id FROM source_docs WHERE sync_source = 'url'`
);
for (const r of rows) {
await queue.enqueue('sync.source_doc', { source_doc_id: r.id });
}
return rows.length;
}