From 5f5d9edf83ffcc23c3b736eec39b5015e8eb0c94 Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Fri, 10 Apr 2026 23:08:49 +0200 Subject: [PATCH] =?UTF-8?q?Batch-Analyse=20UI:=20Button=20im=20Pr=C3=BCfen?= =?UTF-8?q?-Tab=20mit=20BL-Auswahl=20+=20Limit=20+=20Queue-Polling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/index.html | 85 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/app/templates/index.html b/app/templates/index.html index 2aeb638..0c06336 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -889,6 +889,33 @@ + + +
+

πŸ“¦ Batch-Analyse

+

+ Analysiert automatisch die neuesten ungeprΓΌften AntrΓ€ge eines Bundeslandes. +

+
+ + + +
+
+
@@ -1318,6 +1345,64 @@ } } + // ─── Batch-Analyse ────────────────────────────────────────── + async function startBatch() { + const bl = document.getElementById('batch-bundesland').value; + const limit = document.getElementById('batch-limit').value; + const btn = document.getElementById('batch-btn'); + const status = document.getElementById('batch-status'); + + btn.disabled = true; + btn.textContent = '⏳ Wird gestartet...'; + status.innerHTML = ''; + + try { + const resp = await fetch('/api/batch-analyze', { + method: 'POST', + headers: {'Content-Type': 'application/x-www-form-urlencoded'}, + body: `bundesland=${bl}&limit=${limit}` + }); + if (resp.status === 401) { + status.innerHTML = 'πŸ”’ Bitte zuerst anmelden.'; + btn.disabled = false; btn.textContent = 'πŸš€ Batch starten'; + return; + } + const data = await resp.json(); + if (data.status === 'batch_enqueued') { + status.innerHTML = ` + βœ“ ${data.enqueued} AntrΓ€ge in die Queue eingereiht + ${data.skipped_existing > 0 ? `
${data.skipped_existing} bereits bewertet (ΓΌbersprungen)` : ''} +
Die Analyse lΓ€uft im Hintergrund. Ergebnisse erscheinen nach und nach in der Liste. + `; + // Queue-Status pollen + pollBatchQueue(status); + } else { + status.innerHTML = `❌ ${data.detail || 'Fehler'}`; + } + } catch (e) { + status.innerHTML = `❌ ${e.message}`; + } + btn.disabled = false; btn.textContent = 'πŸš€ Batch starten'; + } + + async function pollBatchQueue(statusEl) { + for (let i = 0; i < 200; i++) { + await new Promise(r => setTimeout(r, 5000)); + try { + const qs = await fetch('/api/queue/status').then(r => r.json()); + if (qs.pending === 0) { + statusEl.innerHTML += `
βœ“ Alle Jobs abgeschlossen (${qs.processed_total} verarbeitet)`; + loadAssessments(); // Liste aktualisieren + return; + } + statusEl.querySelector('.queue-progress')?.remove(); + statusEl.insertAdjacentHTML('beforeend', + `
⏳ ${qs.pending} Jobs in der Queue, ~${Math.round(qs.estimated_wait_seconds/60)} Min. verbleibend
` + ); + } catch { break; } + } + } + // ─── Merkliste (#94) ──────────────────────────────────────── async function loadBookmarksList() { const container = document.getElementById('bookmarks-content');