fix: expose migrations execute API route and preserve real migration errors in UI fallback

This commit is contained in:
Christian 2026-04-01 23:55:20 +02:00
parent ba601e38b1
commit c99790a710
2 changed files with 27 additions and 5 deletions

View File

@ -308,6 +308,15 @@ async def get_migration_statuses_api():
return migration_statuses()
@router.post("/settings/migrations/execute", tags=["Settings"])
async def execute_migration_api(payload: dict):
"""Expose migration execution via API router (served under /api/v1)."""
from app.settings.backend.views import execute_migration, MigrationExecution
model = MigrationExecution(**payload)
return execute_migration(model)
@router.post("/settings/sync-from-env", tags=["Settings"])
async def sync_settings_from_env():
"""Sync settings from .env file into database (only updates empty values)"""

View File

@ -184,6 +184,7 @@
const attempts = [];
let data = null;
let lastError = null;
let hardError = null;
for (const url of urls) {
try {
@ -202,7 +203,12 @@
break;
}
lastError = payload.detail || payload.message || `HTTP ${response.status}`;
const errMsg = payload.detail || payload.message || `HTTP ${response.status}`;
if (response.status !== 404 && response.status !== 405) {
hardError = errMsg;
break;
}
lastError = errMsg;
} catch (err) {
attempts.push(`${url} -> ERR`);
lastError = err.message || 'Netvaerksfejl';
@ -210,11 +216,12 @@
}
if (!data) {
throw new Error(`${lastError || 'Migration fejlede'} (forsøgt: ${attempts.join(' | ')})`);
throw new Error(`${hardError || lastError || 'Migration fejlede'} (forsøgt: ${attempts.join(' | ')})`);
}
feedback.className = 'alert alert-success mt-3';
feedback.innerHTML = `<strong>Migration kørt</strong><br><pre class="mb-0">${data.output}</pre>`;
const output = data.output || data.message || 'Migration executed successfully';
feedback.innerHTML = `<strong>Migration kørt</strong><br><pre class="mb-0">${output}</pre>`;
} catch (error) {
feedback.className = 'alert alert-danger mt-3';
feedback.innerHTML = `<strong>Fejl</strong><br>${error.message}`;
@ -291,6 +298,7 @@
const urls = buildMigrationActionUrls('status');
let data = null;
let lastError = null;
let hardError = null;
const attempts = [];
for (const url of urls) {
@ -302,7 +310,12 @@
data = payload;
break;
}
lastError = payload.detail || `HTTP ${response.status}`;
const errMsg = payload.detail || `HTTP ${response.status}`;
if (response.status !== 404 && response.status !== 405) {
hardError = errMsg;
break;
}
lastError = errMsg;
} catch (err) {
attempts.push(`${url} -> ERR`);
lastError = err.message || 'Netvaerksfejl';
@ -310,7 +323,7 @@
}
if (!data) {
throw new Error(`${lastError || 'Status check fejlede'} (forsøgt: ${attempts.join(' | ')})`);
throw new Error(`${hardError || lastError || 'Status check fejlede'} (forsøgt: ${attempts.join(' | ')})`);
}
const statuses = data.statuses || [];