const path = require('path'); const fs = require('fs'); const db = require('./db'); const dataDir = path.join(__dirname, 'data'); const backupDir = path.join(dataDir, 'backups'); const INTERVAL_HOURS = Number(process.env.BACKUP_INTERVAL_HOURS) || 24; const RETENTION_COUNT = Number(process.env.BACKUP_RETENTION_COUNT) || 14; function timestamp() { return new Date().toISOString().replace(/[:.]/g, '-'); } async function runBackup() { if (!fs.existsSync(backupDir)) fs.mkdirSync(backupDir, { recursive: true }); const target = path.join(backupDir, `data-${timestamp()}.db`); await db.backup(target); cleanupOldBackups(); console.log(`Backup geschrieben: ${target}`); return target; } function cleanupOldBackups() { const files = fs .readdirSync(backupDir) .filter((f) => f.startsWith('data-') && f.endsWith('.db')) .sort(); const excess = files.length - RETENTION_COUNT; for (let i = 0; i < excess; i++) { fs.unlinkSync(path.join(backupDir, files[i])); } } function startBackupScheduler() { runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err)); setInterval(() => { runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err)); }, INTERVAL_HOURS * 60 * 60 * 1000); } module.exports = { startBackupScheduler, runBackup };