import { runOutreachBatch } from './run.mjs'; const CICLO_MS = 20 * 60 * 1000; // Timer interno no processo do servidor: nao depende de agendador do sistema // operacional (Task Scheduler/cron), entao funciona identico local (Windows) // ou dentro de um container Docker apos a migracao — so precisa do servidor // estar de pe, o que ja e verdade hoje. runOutreachBatch e idempotente e sai // cedo quando desligado/fora de horario/limite batido, entao rodar a cada // 20 min e seguro sem lock ou fila. export function startOutreachScheduler({ db, log = () => {} }) { const ciclo = () => { runOutreachBatch({ db, log }).catch((error) => { log(`outreach: erro inesperado no ciclo automatico: ${error.message}`); }); }; // roda um primeiro ciclo pouco depois do boot (idempotente/seguro), sem // esperar os 20 min inteiros para o primeiro lote do dia. const primeiro = setTimeout(ciclo, 30 * 1000); primeiro.unref(); const timer = setInterval(ciclo, CICLO_MS); timer.unref(); return () => { clearTimeout(primeiro); clearInterval(timer); }; }