diff --git a/src/pages/admin/AdminDatabaseHealthPage.tsx b/src/pages/admin/AdminDatabaseHealthPage.tsx index d7f7347..32bcaae 100644 --- a/src/pages/admin/AdminDatabaseHealthPage.tsx +++ b/src/pages/admin/AdminDatabaseHealthPage.tsx @@ -841,7 +841,17 @@ const MigrationTab: React.FC = () => { _addExportLog(t('Export gestartet: {count} Datenbanken', { count: totalDbs })); - const rawChunks: string[] = []; + let token = ''; + try { + const startRes = await api.post('/api/admin/database-health/migration/export-start'); + token = startRes.data.token; + } catch (err: any) { + _addExportLog(t('Fehler beim Starten des Exports: {error}', { error: String(err) }), 'error'); + toast.showError(t('Export fehlgeschlagen')); + setExporting(false); + return; + } + let totalTables = 0; let totalRecords = 0; let errors = 0; @@ -852,18 +862,14 @@ const MigrationTab: React.FC = () => { _addExportLog(t('Exportiere {index}/{total}: {db}...', { index: i + 1, total: totalDbs, db: dbName })); try { const res = await api.get('/api/admin/database-health/migration/export-single', { - params: { database: dbName }, - responseType: 'text', + params: { token, database: dbName }, }); - const parsed = JSON.parse(res.data); - const dbData = parsed.data; - totalTables += dbData?.tableCount || 0; - totalRecords += dbData?.totalRecords || 0; - rawChunks.push(`${JSON.stringify(dbName)}:${JSON.stringify(dbData)}`); + totalTables += res.data.tableCount || 0; + totalRecords += res.data.totalRecords || 0; exportedCount++; _addExportLog( t('{db}: {tables} Tabellen, {records} Datensaetze', { - db: dbName, tables: dbData?.tableCount || 0, records: dbData?.totalRecords || 0, + db: dbName, tables: res.data.tableCount || 0, records: res.data.totalRecords || 0, }), 'success', ); @@ -885,23 +891,18 @@ const MigrationTab: React.FC = () => { } _addExportLog(t('Erstelle Exportdatei...')); - await new Promise(r => setTimeout(r, 0)); try { - const meta = JSON.stringify({ - exportedAt: new Date().toISOString(), - version: '1.0', - databaseCount: exportedCount, - totalTables, - totalRecords, - }); - const jsonStr = `{"meta":${meta},"databases":{${rawChunks.join(',')}}}`; - const ts = new Date().toISOString().replace(/:/g, '-').slice(0, 19); const scope = isFullExport ? 'full' : 'partial'; const filename = `db_backup_${instanceLabel}_${scope}_${ts}.json`; - const blob = new Blob([jsonStr], { type: 'application/json' }); + const res = await api.get('/api/admin/database-health/migration/export-download', { + params: { token, filename }, + responseType: 'blob', + }); + + const blob = new Blob([res.data], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; @@ -924,7 +925,7 @@ const MigrationTab: React.FC = () => { toast.showSuccess(t('Export erfolgreich')); } } catch (err: any) { - _addExportLog(t('Fehler beim Erstellen der Exportdatei: {error}', { error: String(err) }), 'error'); + _addExportLog(t('Fehler beim Download der Exportdatei: {error}', { error: String(err) }), 'error'); toast.showError(t('Export fehlgeschlagen')); } finally { setExporting(false);