Phase 2 Complete - Backend Core Logic New Components: - DeletionLogRepository: CRUD for deletion audit trail - GroupCleanupService: Core cleanup logic - findGroupsForDeletion() - finds unapproved groups older than 7 days - deleteGroupCompletely() - DB + file deletion - deletePhysicalFiles() - removes images & previews - logDeletion() - creates audit log entry - getDaysUntilDeletion() - calculates remaining days - performScheduledCleanup() - main cleanup orchestrator - SchedulerService: Cron job management - Daily cleanup at 10:00 AM (Europe/Berlin) - Manual trigger for development GroupRepository Extensions: - findUnapprovedGroupsOlderThan(days) - deleteGroupCompletely(groupId) - getGroupStatistics(groupId) Dependencies: - node-cron ^3.0.3 Integration: - Scheduler auto-starts with server (server.js) - Comprehensive logging for all operations Tasks completed: ✅ 2.3, ✅ 2.4, ✅ 2.5
50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
const cron = require('node-cron');
|
|
const GroupCleanupService = require('./GroupCleanupService');
|
|
|
|
class SchedulerService {
|
|
constructor() {
|
|
this.tasks = [];
|
|
}
|
|
|
|
start() {
|
|
console.log('[Scheduler] Starting scheduled tasks...');
|
|
|
|
// Cleanup-Job: Jeden Tag um 10:00 Uhr
|
|
const cleanupTask = cron.schedule('0 10 * * *', async () => {
|
|
console.log('[Scheduler] Running daily cleanup at 10:00 AM...');
|
|
try {
|
|
await GroupCleanupService.performScheduledCleanup();
|
|
} catch (error) {
|
|
console.error('[Scheduler] Cleanup task failed:', error);
|
|
}
|
|
}, {
|
|
scheduled: true,
|
|
timezone: "Europe/Berlin" // Anpassen nach Bedarf
|
|
});
|
|
|
|
this.tasks.push(cleanupTask);
|
|
|
|
console.log('✓ Scheduler started - Daily cleanup at 10:00 AM (Europe/Berlin)');
|
|
|
|
// Für Development: Manueller Trigger
|
|
if (process.env.NODE_ENV === 'development') {
|
|
console.log('📝 Development Mode: Use GroupCleanupService.performScheduledCleanup() to trigger manually');
|
|
}
|
|
}
|
|
|
|
stop() {
|
|
console.log('[Scheduler] Stopping all scheduled tasks...');
|
|
this.tasks.forEach(task => task.stop());
|
|
this.tasks = [];
|
|
console.log('✓ Scheduler stopped');
|
|
}
|
|
|
|
// Für Development: Manueller Cleanup-Trigger
|
|
async triggerCleanupNow() {
|
|
console.log('[Scheduler] Manual cleanup triggered...');
|
|
return await GroupCleanupService.performScheduledCleanup();
|
|
}
|
|
}
|
|
|
|
module.exports = new SchedulerService();
|