107 lines
3.5 KiB
TypeScript
107 lines
3.5 KiB
TypeScript
import { getInterests } from '~/server/utils/nocodb';
|
|
import { checkDocumentSignatureStatus } from '~/server/utils/documeso';
|
|
|
|
// Track if tasks are already scheduled
|
|
let tasksScheduled = false;
|
|
|
|
export async function scheduleEOIReminders() {
|
|
if (tasksScheduled) {
|
|
console.log('[EOI Reminders] Tasks already scheduled');
|
|
return;
|
|
}
|
|
|
|
console.log('[EOI Reminders] Scheduling reminder tasks...');
|
|
|
|
// Check every hour if it's time to send reminders
|
|
setInterval(async () => {
|
|
const now = new Date();
|
|
const parisTime = new Date(now.toLocaleString('en-US', { timeZone: 'Europe/Paris' }));
|
|
const hour = parisTime.getHours();
|
|
const minute = parisTime.getMinutes();
|
|
|
|
// Check if it's 9am or 4pm (16:00)
|
|
if ((hour === 9 || hour === 16) && minute === 0) {
|
|
console.log(`[EOI Reminders] Running ${hour === 9 ? '9am' : '4pm'} reminder check...`);
|
|
await processReminders();
|
|
}
|
|
}, 60000); // Check every minute
|
|
|
|
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 {
|
|
// Use a full URL for the fetch since we're in a background task
|
|
const baseUrl = process.env.NUXT_PUBLIC_SITE_URL || 'http://localhost:3000';
|
|
const response = await $fetch<{
|
|
success: boolean;
|
|
remindersSent: number;
|
|
results: any[];
|
|
message?: string;
|
|
}>(`${baseUrl}/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();
|
|
}
|