fix: expose migrations execute API route and preserve real migration errors in UI fallback
This commit is contained in:
parent
ba601e38b1
commit
c99790a710
@ -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)"""
|
||||
|
||||
@ -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 || [];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user