update
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user