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)} +
+
+ )}