diff --git a/frontend/src/pages/settings/DatabaseBackup.tsx b/frontend/src/pages/settings/DatabaseBackup.tsx
index 1d30a8c3..b4077908 100644
--- a/frontend/src/pages/settings/DatabaseBackup.tsx
+++ b/frontend/src/pages/settings/DatabaseBackup.tsx
@@ -1,10 +1,21 @@
import { useState, useRef } from 'react';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
+import toast from 'react-hot-toast';
import { Database, Download, Upload, Trash2, RefreshCw, HardDrive, Clock, FileText, FolderOpen, Archive, AlertTriangle, Bomb } from 'lucide-react';
import { backupApi, BackupInfo, getAccessToken } from '../../services/api';
import { useAuth } from '../../context/AuthContext';
import Button from '../../components/ui/Button';
+function extractError(err: any): string {
+ const data = err?.response?.data;
+ if (data) {
+ if (data.error && data.details) return `${data.error}: ${data.details}`;
+ if (data.error) return data.error;
+ if (typeof data === 'string') return data;
+ }
+ return err?.message || 'Unbekannter Fehler';
+}
+
export default function DatabaseBackup() {
const [showRestoreConfirm, setShowRestoreConfirm] = useState(null);
const [showDeleteConfirm, setShowDeleteConfirm] = useState(null);
@@ -34,9 +45,17 @@ export default function DatabaseBackup() {
// Backup wiederherstellen
const restoreMutation = useMutation({
mutationFn: (name: string) => backupApi.restore(name),
- onSuccess: () => {
+ onSuccess: (response: any) => {
queryClient.invalidateQueries({ queryKey: ['backups'] });
setShowRestoreConfirm(null);
+ // Backend liefert message: "X Datensätze und Y Dateien wiederhergestellt"
+ const msg = response?.message || 'Backup erfolgreich wiederhergestellt.';
+ toast.success(msg, { duration: 6000 });
+ },
+ // Bei Fehler bleibt das Dialog absichtlich offen, damit der User
+ // die Detail-Message sehen + ggf. erneut versuchen kann.
+ onError: (err: any) => {
+ toast.error(extractError(err), { duration: 8000 });
},
});
@@ -329,13 +348,24 @@ export default function DatabaseBackup() {
Achtung: Bestehende Daten und Dokumente werden mit dem Backup-Stand überschrieben.
Dies kann nicht rückgängig gemacht werden.
+ {restoreMutation.isError && (
+
+
Wiederherstellung fehlgeschlagen
+
+ {extractError(restoreMutation.error)}
+
+
+ )}
Wird wiederhergestellt...
>
+ ) : restoreMutation.isError ? (
+ 'Erneut versuchen'
) : (
'Ja, wiederherstellen'
)}