This commit is contained in:
Matt 2025-06-10 14:05:09 +02:00
parent 218705da52
commit bd07939c3d
3 changed files with 22 additions and 10 deletions

View File

@ -2,18 +2,28 @@ import { scheduleEOIReminders } from '~/server/tasks/eoi-reminders';
import { scheduleEmailProcessing } from '~/server/tasks/process-sales-emails'; import { scheduleEmailProcessing } from '~/server/tasks/process-sales-emails';
export default defineNitroPlugin((nitroApp) => { export default defineNitroPlugin((nitroApp) => {
console.log('[Plugin] Initializing automated tasks...');
// Schedule EOI reminders when server starts // Schedule EOI reminders when server starts
console.log('[Plugin] Initializing EOI reminder scheduler...'); console.log('[Plugin] Initializing EOI reminder scheduler...');
// Add a small delay to ensure all services are ready // Add a small delay to ensure all services are ready
setTimeout(() => { setTimeout(async () => {
scheduleEOIReminders(); try {
await scheduleEOIReminders();
} catch (error) {
console.error('[Plugin] Failed to schedule EOI reminders:', error);
}
}, 5000); }, 5000);
// Schedule email processing for EOI attachments // Schedule email processing for EOI attachments
console.log('[Plugin] Initializing email processing scheduler...'); console.log('[Plugin] Initializing email processing scheduler...');
setTimeout(() => { setTimeout(async () => {
scheduleEmailProcessing(); try {
await scheduleEmailProcessing();
} catch (error) {
console.error('[Plugin] Failed to schedule email processing:', error);
}
}, 7000); }, 7000);
}); });

View File

@ -1,11 +1,10 @@
import cron from 'node-cron';
import { getInterests } from '~/server/utils/nocodb'; import { getInterests } from '~/server/utils/nocodb';
import { checkDocumentSignatureStatus } from '~/server/utils/documeso'; import { checkDocumentSignatureStatus } from '~/server/utils/documeso';
// Track if tasks are already scheduled // Track if tasks are already scheduled
let tasksScheduled = false; let tasksScheduled = false;
export function scheduleEOIReminders() { export async function scheduleEOIReminders() {
if (tasksScheduled) { if (tasksScheduled) {
console.log('[EOI Reminders] Tasks already scheduled'); console.log('[EOI Reminders] Tasks already scheduled');
return; return;
@ -13,6 +12,9 @@ export function scheduleEOIReminders() {
console.log('[EOI Reminders] Scheduling reminder tasks...'); console.log('[EOI Reminders] Scheduling reminder tasks...');
// Dynamic import for node-cron to avoid ESM issues
const cron = await import('node-cron');
// Schedule for 9am daily // Schedule for 9am daily
cron.schedule('0 9 * * *', async () => { cron.schedule('0 9 * * *', async () => {
console.log('[EOI Reminders] Running 9am reminder check...'); console.log('[EOI Reminders] Running 9am reminder check...');

View File

@ -1,6 +1,6 @@
import { simpleParser } from 'mailparser'; import { simpleParser } from 'mailparser';
import type { ParsedMail } from 'mailparser'; import type { ParsedMail } from 'mailparser';
import Imap from 'imap'; const Imap = require('imap');
export type { ParsedMail }; export type { ParsedMail };
@ -16,7 +16,7 @@ export async function parseEmail(emailContent: string): Promise<ParsedMail> {
return await simpleParser(emailContent); return await simpleParser(emailContent);
} }
export function getIMAPConnection(credentials: EmailCredentials): Promise<Imap> { export function getIMAPConnection(credentials: EmailCredentials): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const imap = new Imap({ const imap = new Imap({
user: credentials.user, user: credentials.user,
@ -41,7 +41,7 @@ export function getIMAPConnection(credentials: EmailCredentials): Promise<Imap>
}); });
} }
export function searchEmails(imap: Imap, criteria: any[]): Promise<number[]> { export function searchEmails(imap: any, criteria: any[]): Promise<number[]> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
imap.search(criteria, (err: Error | null, results: number[]) => { imap.search(criteria, (err: Error | null, results: number[]) => {
if (err) reject(err); if (err) reject(err);
@ -50,7 +50,7 @@ export function searchEmails(imap: Imap, criteria: any[]): Promise<number[]> {
}); });
} }
export function fetchEmail(imap: Imap, msgId: number, options: any): Promise<string> { export function fetchEmail(imap: any, msgId: number, options: any): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let emailData = ''; let emailData = '';