bodegAI/services/cron_service.js

56 lines
2.0 KiB
JavaScript

const cron = require('node-cron');
const { sendReminder } = require('../tasks/send_reminder');
const config = require('../config.json');
/**
* Convierte el intervalo en horas o minutos a minutos.
* @param {String} intervalo - Intervalo en el formato "2 horas" o "45 minutos".
* @returns {Number} - Intervalo en minutos.
*/
const getIntervalInMinutes = (intervalo) => {
const [amount, unit] = intervalo.split(' ');
return unit.includes('hora') ? parseInt(amount) * 60 : parseInt(amount);
};
/**
* Programa las tareas de recordatorio basadas en el horario y el intervalo.
* @param {Object} client - Instancia del cliente de WhatsApp.
*/
const initializeCronJobs = (client) => {
const dailyRoutines = config.rutinas.diarias;
dailyRoutines.forEach((routine) => {
const { actividad, detalles } = routine;
const { intervalo, horario, que, hora } = detalles;
if (intervalo && horario) {
const intervalInMinutes = getIntervalInMinutes(intervalo);
const [startHour, startMinute] = horario.inicio.split(':').map(Number);
const [endHour, endMinute] = horario.fin.split(':').map(Number);
cron.schedule(`*/${intervalInMinutes} * * * *`, () => {
const now = new Date();
const isWithinTimeFrame =
now.getHours() >= startHour &&
now.getHours() <= endHour &&
(now.getHours() < endHour || now.getMinutes() <= endMinute);
if (isWithinTimeFrame) {
sendReminder(client, actividad, que);
}
});
}
else if (hora) {
const [hour, minute] = hora.split(':');
cron.schedule(`${minute} ${hour} * * *`, () => {
sendReminder(client, actividad, que);
});
}
});
console.log('⏰ Recordatorios programados según configuración en config.json');
};
module.exports = {
initializeCronJobs
};