2025-06-10 13:59:09 +02:00
|
|
|
import { getInterests } from '~/server/utils/nocodb';
|
|
|
|
|
import { checkDocumentSignatureStatus } from '~/server/utils/documeso';
|
|
|
|
|
|
|
|
|
|
// Track if tasks are already scheduled
|
|
|
|
|
let tasksScheduled = false;
|
|
|
|
|
|
2025-06-10 14:05:09 +02:00
|
|
|
export async function scheduleEOIReminders() {
|
2025-06-10 13:59:09 +02:00
|
|
|
if (tasksScheduled) {
|
|
|
|
|
console.log('[EOI Reminders] Tasks already scheduled');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log('[EOI Reminders] Scheduling reminder tasks...');
|
|
|
|
|
|
2025-06-10 14:05:09 +02:00
|
|
|
// Dynamic import for node-cron to avoid ESM issues
|
|
|
|
|
const cron = await import('node-cron');
|
|
|
|
|
|
2025-06-10 13:59:09 +02:00
|
|
|
// 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();
|
|
|
|
|
}
|