From 8d24d57719810bbf6830aba3b198721248cfd42d Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Sun, 24 May 2026 08:59:46 +0200
Subject: [PATCH] fixed db download
---
src/pages/admin/AdminDatabaseHealthPage.tsx | 43 +++++++++++----------
1 file changed, 22 insertions(+), 21 deletions(-)
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);