import React, { useEffect, useState } from 'react'; import { Archive, Download, Loader2 } from 'lucide-react'; import { BackupFile, SystemSettings } from '../../lib/types'; import { api } from '../../lib/api'; import { ToggleSwitch } from '../../components/ToggleSwitch'; import { formatBytes, saveBlob } from '../../lib/download'; interface BackupAdminCardProps { settings: SystemSettings; onSave: (patch: Partial) => void; } // Admin: automatic daily backups (whole database + one backup per user), list and manual run export const BackupAdminCard: React.FC = ({ settings, onSave }) => { const [files, setFiles] = useState([]); const [running, setRunning] = useState(false); const [error, setError] = useState(null); useEffect(() => { api.adminListBackups().then(setFiles).catch(() => {}); }, []); const runNow = async () => { setRunning(true); setError(null); try { setFiles(await api.adminRunBackup()); } catch (err: any) { setError(err.message || 'Backup fehlgeschlagen'); api.adminListBackups().then(setFiles).catch(() => {}); } finally { setRunning(false); } }; const download = async (name: string) => { try { saveBlob(await api.adminDownloadBackup(name), name); } catch (err: any) { setError(err.message || 'Download fehlgeschlagen'); } }; return (

Automatische Backups

Täglich ein Abzug der ganzen Datenbank und ein Backup je Benutzer unter backups/ im Datenverzeichnis. Das schützt vor Fehlbedienung, nicht vor einer kaputten Platte: den Ordner zusätzlich woanders sichern.

onSave({ backupEnabled })} title={settings.backupEnabled ? 'Automatische Backups ausschalten' : 'Automatische Backups einschalten'} />
{error &&

{error}

}
{files.length === 0 ? (

Noch keine Server-Backups vorhanden.

) : ( files.map((f) => (

{f.name}

{new Date(f.createdAt).toLocaleString('de-DE')} · {formatBytes(f.size)}

)) )}

Zurückspielen eines Datenbank-Abzugs: Container stoppen, mindsift.db durch die entpackte Datei ersetzen (gunzip), Container starten. Einzelne Benutzer stellen ihre Daten selbst in den Kontoeinstellungen wieder her.

); };