import cron from 'node-cron'; import { getInterests } from '~/server/utils/nocodb'; import { checkDocumentSignatureStatus } from '~/server/utils/documeso'; // Track if tasks are already scheduled let tasksScheduled = false; export function scheduleEOIReminders() { if (tasksScheduled) { console.log('[EOI Reminders] Tasks already scheduled'); return; } console.log('[EOI Reminders] Scheduling reminder tasks...'); // Schedule for 9am daily cron.schedule('0 9 * * *', async () => { console.log('[EOI Reminders] Running 9am reminder check...'); await processReminders(); }, { timezone: 'Europe/Paris' }); // Schedule for 4pm daily cron.schedule('0 16 * * *', async () => { console.log('[EOI Reminders] Running 4pm reminder check...'); await processReminders(); }, { timezone: 'Europe/Paris' }); tasksScheduled = true; console.log('[EOI Reminders] Tasks scheduled successfully'); } async function processReminders() { try { // Get all interests const response = await getInterests(); const interests = response.list || []; console.log(`[EOI Reminders] Processing ${interests.length} interests...`); for (const interest of interests) { try { // Skip if no document ID or reminders disabled const documentId = (interest as any)['documeso_document_id']; const remindersEnabled = (interest as any)['reminder_enabled'] !== false; if (!documentId || !remindersEnabled) { continue; } // Check if we should send reminder (not sent in last 12 hours) const lastReminderSent = (interest as any)['last_reminder_sent']; if (lastReminderSent) { const lastSentTime = new Date(lastReminderSent).getTime(); const twelveHoursAgo = Date.now() - (12 * 60 * 60 * 1000); if (lastSentTime > twelveHoursAgo) { continue; // Skip if reminder sent within last 12 hours } } // Send reminder await sendReminder(interest); } catch (error) { console.error(`[EOI Reminders] Error processing interest ${interest.Id}:`, error); } } console.log('[EOI Reminders] Reminder processing completed'); } catch (error) { console.error('[EOI Reminders] Error in processReminders:', error); } } async function sendReminder(interest: any) { try { const response = await $fetch<{ success: boolean; remindersSent: number; results: any[]; message?: string; }>('/api/eoi/send-reminders', { method: 'POST', headers: { 'x-tag': '094ut234' // System tag for automated processes }, body: { interestId: interest.Id.toString(), documentId: (interest as any)['documeso_document_id'] } }); if (response.success) { console.log(`[EOI Reminders] Sent ${response.remindersSent} reminders for interest ${interest.Id}`); } } catch (error) { console.error(`[EOI Reminders] Failed to send reminder for interest ${interest.Id}:`, error); } } // Export function to manually trigger reminders (for testing) export async function triggerReminders() { console.log('[EOI Reminders] Manually triggering reminder check...'); await processReminders(); }