const path = require('path'); const dotenv = require('dotenv'); const nodeEnv = process.env.NODE_ENV || 'development'; const envFile = nodeEnv === 'production' ? '.env.production' : '.env.development'; dotenv.config({ path: path.resolve(__dirname, envFile) }); const cron = require('node-cron'); const { main: runSyncCycle } = require('./src/app.js'); const { logInfo, logError } = require('./src/utils/logger.js'); let isCronRunning = false; const CRON_SCHEDULE = process.env.CRON_SCHEDULE || '*/5 * * * *'; // A cada 5 minutos por padrão logInfo(`⏰ Agendando ciclo de sincronização para rodar com a frequência: ${CRON_SCHEDULE}`); cron.schedule(CRON_SCHEDULE, async () => { if (isCronRunning) { logInfo('CRON: Ciclo anterior ainda em execução. Pulando esta rodada.'); return; } isCronRunning = true; logInfo('CRON: Iniciando ciclo de sincronização...'); try { await runSyncCycle(); // A função main já loga sua própria mensagem de sucesso, então não precisamos duplicar aqui. } catch (error) { logError('CRON: Ocorreu um erro inesperado durante o ciclo de sincronização.', error); } finally { logInfo('CRON: Finalizando ciclo de sincronização.'); isCronRunning = false; } }); /** * @file cron.js * @description Responsável por agendar e executar a rotina de sincronização periodicamente. * Este arquivo: * 1. Carrega as variáveis de ambiente apropriadas para o ambiente (desenvolvimento/produção). * 2. Agenda um `cron job` (usando node-cron) para executar a função principal de sincronização. * 3. Garante que apenas uma instância do ciclo de sincronização rode por vez. */