From d0921a28e92c4f3bfd282ab660a3f59bdd2e3393 Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 25 Apr 2026 08:53:28 +0200 Subject: [PATCH] =?UTF-8?q?Admin-Wartung:=20obsolete=20Buttons=20entfernt,?= =?UTF-8?q?=20Enrichment-Status=20+=20Foto-Laden=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Temperament→Deutsch-Button entfernt (0 englische Temperamente in DB) - Gemma-Einträge-zurücksetzen entfernt (0 Gemma-Einträge, alle Claude Haiku) - Neuer Button: Enrichment-Status (GET /api/admin/wiki/enrichment-status) zeigt Gesamt/Angereichert/Kein-Wiki/Ausstehend/Fotos/Modelle-Verteilung - Neuer Button: Fotos laden (POST /api/admin/wiki/fetch-photos) führt fetch_wiki_images.py --limit 50 aus und zählt gespeicherte Fotos - SW by-v361, APP_VER 346 --- backend/routes/admin.py | 50 ++++++++++++++++++++++++-------- backend/static/js/app.js | 2 +- backend/static/js/pages/admin.js | 26 +++++++++-------- backend/static/sw.js | 2 +- 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/backend/routes/admin.py b/backend/routes/admin.py index 38e6d1c..82cc640 100644 --- a/backend/routes/admin.py +++ b/backend/routes/admin.py @@ -671,23 +671,49 @@ async def wiki_evaluate(sample: int = 20, user=Depends(require_mod)): # ------------------------------------------------------------------ -# POST /api/admin/wiki/reset-gemma — Gemma-Einträge zurücksetzen +# GET /api/admin/wiki/enrichment-status — Enrichment-Statistik # ------------------------------------------------------------------ -@router.post("/wiki/reset-gemma") -async def wiki_reset_gemma(user=Depends(require_mod)): - from scraper.breed_enricher import reset_gemma_entries - count = reset_gemma_entries() - return {"reset": count} +@router.get("/wiki/enrichment-status") +async def wiki_enrichment_status(user=Depends(require_mod)): + with db() as conn: + total = conn.execute("SELECT COUNT(*) FROM wiki_rassen").fetchone()[0] + enriched = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE ki_enriched=1").fetchone()[0] + no_wiki = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE ki_enriched=2").fetchone()[0] + pending = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE ki_enriched=0").fetchone()[0] + by_model = { + row[0] or "unbekannt": row[1] + for row in conn.execute( + "SELECT ki_model, COUNT(*) FROM wiki_rassen " + "WHERE ki_enriched=1 GROUP BY ki_model ORDER BY 2 DESC" + ).fetchall() + } + with_photo = conn.execute( + "SELECT COUNT(*) FROM wiki_rassen WHERE foto_url IS NOT NULL AND foto_url != ''" + ).fetchone()[0] + return { + "total": total, + "enriched": enriched, + "no_wiki": no_wiki, + "pending": pending, + "with_photo": with_photo, + "by_model": by_model, + } # ------------------------------------------------------------------ -# POST /api/admin/wiki/translate-temperament — einmalige Migration +# POST /api/admin/wiki/fetch-photos — Wiki-Fotos laden # ------------------------------------------------------------------ -@router.post("/wiki/translate-temperament") -async def wiki_translate_temperament(user=Depends(require_mod)): - from scraper.breed_enricher import translate_existing_temperaments - updated = translate_existing_temperaments() - return {"updated": updated} +@router.post("/wiki/fetch-photos") +async def wiki_fetch_photos(limit: int = 50, user=Depends(require_mod)): + import asyncio, subprocess + proc = await asyncio.create_subprocess_exec( + "python3", "/app/scraper/fetch_wiki_images.py", "--limit", str(limit), + stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) + stdout, stderr = await proc.communicate() + lines = (stdout + stderr).decode() + found = lines.count("Foto gespeichert") + return {"launched": True, "found": found, "log": lines[-2000:]} # ------------------------------------------------------------------ diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 74d9cc2..df1b431 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '345'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '346'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const App = (() => { diff --git a/backend/static/js/pages/admin.js b/backend/static/js/pages/admin.js index b269f9e..08b4e9c 100644 --- a/backend/static/js/pages/admin.js +++ b/backend/static/js/pages/admin.js @@ -739,14 +739,14 @@ window.Page_admin = (() => {
Wartung
- -