Dienstplan-Pro/server/backup.js

34 lines
1 KiB
JavaScript

const path = require('path');
const fs = require('fs');
const { db, DATA_DIR } = require('./db');
const BACKUP_DIR = path.join(DATA_DIR, 'backups');
const KEEP = 14;
async function runBackup(now) {
fs.mkdirSync(BACKUP_DIR, { recursive: true });
const stamp = now.replace(/[:.]/g, '-');
const dest = path.join(BACKUP_DIR, `dienstplan-${stamp}.db`);
await db.backup(dest); // Online-Backup-API von SQLite — konsistent, ohne cp-Risiko
prune();
return dest;
}
function prune() {
const files = fs.readdirSync(BACKUP_DIR)
.filter(f => f.startsWith('dienstplan-') && f.endsWith('.db'))
.sort(); // ISO-abgeleiteter Stamp → lexikografisch == chronologisch
const excess = files.length - KEEP;
for (let i = 0; i < excess; i++) {
fs.unlinkSync(path.join(BACKUP_DIR, files[i]));
}
}
function scheduleBackups() {
const tick = () => runBackup(new Date().toISOString())
.catch(e => console.error('Backup fehlgeschlagen:', e));
tick();
setInterval(tick, 24 * 60 * 60 * 1000);
}
module.exports = { runBackup, scheduleBackups, BACKUP_DIR };