t_6549bb2b: Align SPA with admin server API (reset endpoint, initAuth, remove SQL query)

This commit is contained in:
Leo
2026-05-21 17:19:39 -04:00
parent d1c7853877
commit 19bdbf0ec3
+6 -35
View File
@@ -736,14 +736,12 @@
<div style="display:flex;flex-wrap:wrap;gap:8px;">
<a href="/api/export/assets" class="btn btn-outline" download>📄 Export Assets CSV</a>
<a href="/api/export/checkins" class="btn btn-outline" download>📄 Export Check-Ins CSV</a>
<a href="/api/export/service-summary" class="btn btn-outline" download>📄 Service Summary CSV</a>
</div>
</div>
<div class="card">
<div class="card-title">Database</div>
<div style="display:flex;flex-wrap:wrap;gap:8px;">
<button class="btn btn-danger btn-sm" onclick="confirmResetDb()">⚠️ Reset Database</button>
<button class="btn btn-outline btn-sm" onclick="showRunSqlModal()">💾 Run SQL</button>
</div>
<div id="resetResult" class="text-sm text-muted mt-8"></div>
</div>
@@ -900,6 +898,7 @@ async function doLogin() {
AppState.currentUser = { id: data.id, username: data.username, role: data.role };
AppState.authToken = data.token;
localStorage.setItem('adminToken', data.token);
sessionStorage.setItem('adminUser', JSON.stringify(AppState.currentUser));
document.getElementById('loginOverlay').classList.add('hidden');
updateUserUI();
switchPage('dashboard');
@@ -1916,43 +1915,15 @@ async function confirmResetDb() {
'Reset Everything', 'btn-danger');
if (!confirmed) return;
try {
const result = await api('/api/admin/reset', { method: 'POST' });
const result = await api('/api/reset-database', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-Confirm-Reset': 'yes' },
});
showToast(result.message || 'Database reset');
document.getElementById('resetResult').textContent = 'Reset at ' + new Date().toLocaleString();
} catch (e) {
document.getElementById('resetResult').innerHTML =
`<span class="text-danger">Reset endpoint not available: ${esc(e.message)}. Add a POST /api/admin/reset route to the server.</span>`;
}
}
function showRunSqlModal() {
document.getElementById('modalTitle').textContent = 'Run SQL Query';
document.getElementById('modalBody').innerHTML = `
<div class="form-group">
<label class="form-label">SQL Statement</label>
<textarea id="modalSql" class="input-field" rows="4" placeholder="SELECT * FROM assets LIMIT 10" style="font-family:monospace;font-size:12px;"></textarea>
</div>
<div id="sqlResult" class="text-sm text-muted"></div>
`;
document.getElementById('modalActions').innerHTML = `
<button class="btn btn-outline" onclick="closeModal(false)">Cancel</button>
<button class="btn btn-primary" onclick="runSql()">Run</button>
`;
document.getElementById('modalOverlay').classList.add('open');
}
async function runSql() {
const sql = document.getElementById('modalSql').value.trim();
if (!sql) return;
try {
const result = await api('/api/admin/query', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ sql }),
});
document.getElementById('sqlResult').innerHTML = `<pre style="background:#0a0b0f;padding:10px;border-radius:6px;font-size:11px;max-height:300px;overflow:auto;">${esc(JSON.stringify(result, null, 2))}</pre>`;
} catch (e) {
document.getElementById('sqlResult').innerHTML = `<span class="text-danger">${esc(e.message)}</span>`;
`<span class="text-danger">Reset failed: ${esc(e.message)}</span>`;
}
}