From e985f0769684c92b5a52108f47415ba8d42cd72c Mon Sep 17 00:00:00 2001 From: team3 Date: Wed, 24 Jun 2026 09:38:20 +0200 Subject: [PATCH] update --- backend/database.py | 11 +++++++++++ backend/routes.py | 24 ++++++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/backend/database.py b/backend/database.py index 5f68b1e..8f17db7 100644 --- a/backend/database.py +++ b/backend/database.py @@ -557,6 +557,17 @@ async def count_relevant_subs(topic: str, baustein: str) -> int: return (await cursor.fetchone())[0] +async def subs_count_roh(topic: str) -> dict[str, int]: + """Relevante Konsens-Subbausteine je ROHEM Baustein-Titel (= Guide-Section-Titel) eines Themas.""" + db = await get_db() + cursor = await db.execute( + "SELECT baustein, COUNT(*) FROM subbausteine WHERE topic = ? " + "AND status = 'konsens' AND relevanz != 'rand' GROUP BY baustein", + (topic,), + ) + return {b: n for b, n in await cursor.fetchall()} + + async def subs_count_alle() -> dict[tuple[str, str], int]: """Relevante Konsens-Subbausteine je (topic, baustein_norm) — für die Stufen-Ableitung.""" db = await get_db() diff --git a/backend/routes.py b/backend/routes.py index 0a36b93..a52aa6c 100644 --- a/backend/routes.py +++ b/backend/routes.py @@ -14,10 +14,9 @@ from database import ( list_progress, set_progress, delete_progress, create_element, list_elements, get_element, update_element, delete_element, list_baustein_progress, get_baustein_progress, set_offene_frage, - set_baustein_score, set_baustein_absolviert, delete_baustein_daten, count_relevant_subs, subs_count_alle, + set_baustein_score, set_baustein_absolviert, delete_baustein_daten, count_relevant_subs, subs_count_roh, delete_topic_pipeline, delete_quelle, get_guide_content, delete_guide_content, ) -from textkit import _norm_titel from bausteine import generate_bausteine, cancel_bausteine, bausteine_status, active_bausteine, reset_bausteine, lade_quelle, lade_uebersicht, subbausteine_titel, lade_frage_muster from elements import generate_element, chat_with_guide, chat_with_element, check_element, style_element, refine_suggestion from lernen import NIVEAUS, cap_fuer, baustein_chat, baustein_diskussion, baustein_element_anlegen, pruefung_bewertung, pruefung_bewertung_schnell, pruefung_frage, pruefung_frage_variante, quiz_generieren, lueckwahl_generieren, lueckentext_generieren, lueckentext_pruefen, score_berechnen, floor_aus_score, progressiver_malus, stufe_aus_score @@ -222,17 +221,22 @@ async def get_frage_muster(topic: str, baustein: str): @router.get("/bausteine/lernstand", response_model=BausteinLernstandResponse) async def baustein_lernstand(topic: str): - """Prüfungs-Stand pro Baustein (roher Titel als Key). cap = 2×relevante Subs [10,50].""" - progress = await list_baustein_progress(topic) - caps = await subs_count_alle() + """Prüfungs-Stand pro Baustein (roher Titel als Key). cap = 2×relevante Subs [10,50] + — für ALLE Bausteine (auch noch nicht geprüfte), damit der cap sofort stimmt.""" + progress = {p["baustein"]: p for p in await list_baustein_progress(topic)} + caps = await subs_count_roh(topic) bausteine = { - p["baustein"]: { - "gute_antworten": p["gute_antworten"], - "streak": p["streak"], - "cap": cap_fuer(caps.get((topic, _norm_titel(p["baustein"])), 0)), + b: { + "gute_antworten": progress[b]["gute_antworten"] if b in progress else 0, + "streak": progress[b]["streak"] if b in progress else 0, + "cap": cap_fuer(n), } - for p in progress + for b, n in caps.items() } + # Altbestand-Bausteine mit Prüfung, aber ohne (relevante) Subs → Default-cap. + for b, p in progress.items(): + if b not in bausteine: + bausteine[b] = {"gute_antworten": p["gute_antworten"], "streak": p["streak"], "cap": 10} return {"bausteine": bausteine}