- Vintage Modell hinzugefuegt - Equipment Multi-Select (Neue Buchung + Bearbeitung) - Kundenadresse in Formularen - Bearbeiten-Seite fuer Buchungen - Abbau-Zeiten in Formularen und Uebersicht - Vertrag PDF nur bei Privatkunden - LexOffice Kontakt-Erstellung Fix (BUSINESS) - Zurueck-Pfeil auf Touren-Seite
82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import cron from 'node-cron';
|
|
import { emailSyncService } from '../lib/email-sync';
|
|
import { prisma } from '../lib/prisma';
|
|
|
|
console.log('🚀 E-Mail-Sync Cron-Job gestartet...\n');
|
|
|
|
// Sync alle 5 Minuten
|
|
cron.schedule('*/5 * * * *', async () => {
|
|
console.log(`\n⏰ [${new Date().toLocaleString('de-DE')}] Starte E-Mail-Sync...`);
|
|
|
|
try {
|
|
const locations = await prisma.location.findMany({
|
|
where: { emailSyncEnabled: true },
|
|
select: { id: true, name: true, slug: true },
|
|
});
|
|
|
|
if (locations.length === 0) {
|
|
console.log('⚠️ Keine Locations mit aktiviertem E-Mail-Sync gefunden.');
|
|
return;
|
|
}
|
|
|
|
console.log(`📍 Sync für ${locations.length} Location(s)...\n`);
|
|
|
|
let totalNewEmails = 0;
|
|
let totalNewBookings = 0;
|
|
|
|
for (const location of locations) {
|
|
console.log(`🔄 ${location.name} (${location.slug})...`);
|
|
|
|
const result = await emailSyncService.syncLocationEmails(location.id);
|
|
|
|
if (result.success) {
|
|
console.log(` ✅ ${result.newEmails} neue E-Mails, ${result.newBookings} neue Buchungen`);
|
|
totalNewEmails += result.newEmails;
|
|
totalNewBookings += result.newBookings;
|
|
} else {
|
|
console.log(` ❌ Fehler: ${result.errors.join(', ')}`);
|
|
}
|
|
}
|
|
|
|
console.log(`\n📊 Gesamt: ${totalNewEmails} E-Mails, ${totalNewBookings} Buchungen`);
|
|
console.log('─'.repeat(60));
|
|
} catch (error: any) {
|
|
console.error('❌ Cron-Job Fehler:', error.message);
|
|
}
|
|
});
|
|
|
|
console.log('✅ Cron-Job läuft - E-Mails werden alle 5 Minuten abgerufen');
|
|
console.log(' Drücken Sie CTRL+C zum Beenden\n');
|
|
|
|
// Sofort einmal ausführen beim Start
|
|
(async () => {
|
|
console.log('🔄 Initialer E-Mail-Sync beim Start...\n');
|
|
|
|
try {
|
|
const locations = await prisma.location.findMany({
|
|
where: { emailSyncEnabled: true },
|
|
select: { id: true, name: true },
|
|
});
|
|
|
|
for (const location of locations) {
|
|
console.log(`📍 ${location.name}...`);
|
|
const result = await emailSyncService.syncLocationEmails(location.id);
|
|
|
|
if (result.success) {
|
|
console.log(` ✅ ${result.newEmails} E-Mails, ${result.newBookings} Buchungen\n`);
|
|
} else {
|
|
console.log(` ❌ ${result.errors.join(', ')}\n`);
|
|
}
|
|
}
|
|
} catch (error: any) {
|
|
console.error('❌ Initialer Sync Fehler:', error.message);
|
|
}
|
|
})();
|
|
|
|
// Graceful shutdown
|
|
process.on('SIGINT', async () => {
|
|
console.log('\n\n👋 Beende E-Mail-Sync Cron-Job...');
|
|
await prisma.$disconnect();
|
|
process.exit(0);
|
|
});
|