// ----------------------------- // Projektübersicht — Datenbank-Backup (Download) // ----------------------------- // Stellt downloadBackup() bereit: lädt einen konsistenten Snapshot der // SQLite-Datenbank über GET /backup als .db-Datei herunter (VACUUM INTO, // WAL-sicher). Hängt im Seitenmenü von App.html am Button "DB Backup" und // nutzt baseUrl() aus js/server.js. Ergänzt das automatische Backup, das der // Server beim Start in sessions/backups/ ablegt. // downloadBackup: fordert den DB-Snapshot an und startet den Download. // Kein Parameter, keine Rückgabe; Fehler werden über ein Alert gemeldet. async function downloadBackup(){ try { const res = await fetch(baseUrl() + '/backup'); if(!res.ok){ let msg = 'Server HTTP ' + res.status; try { const json = await res.json(); if(json && json.error) msg = json.error; } catch(e){ /* Antwort war kein JSON */ } throw new Error(msg); } const blob = await res.blob(); // heuteIso() (js/utils.js) statt toISOString(): Letzteres rechnet nach // UTC um und datierte das Backup zwischen 0 und 2 Uhr Ortszeit auf den // Vortag. const filename = 'projektuebersicht_backup_' + heuteIso() + '.db'; const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000); } catch(err){ console.error('DB-Backup fehlgeschlagen:', err); alert('DB-Backup fehlgeschlagen: ' + (err.message || err)); } }