update
This commit is contained in:
@@ -11,36 +11,42 @@ Query-Schleifen mehr pro Guide.
|
||||
|
||||
import json
|
||||
|
||||
from database import list_baustein_levels_all, list_guides, list_progress_all
|
||||
from database import list_baustein_scores_all, subs_count_alle, list_guides, list_progress_all
|
||||
from guide import guide_slot_dateien
|
||||
from lernen import cap_fuer, STUFEN, _schwelle
|
||||
from paths import bausteine_path, guide_content_path
|
||||
from textkit import _norm_titel
|
||||
|
||||
MAX_OFFENE_GUIDES = 3
|
||||
# Nur noch EIN Format „Guide" (alle relevanten Bausteine, Prüfung 0–30). Keine Progression,
|
||||
# Nur noch EIN Format „Guide" (alle relevanten Bausteine, Prüfung 0–cap). Keine Progression,
|
||||
# keine Vorstufe → der Guide ist immer freischaltbar. „Rest"/FullGuide separat.
|
||||
VORSTUFE: dict[str, str] = {}
|
||||
FREISCHALT_LEVEL: dict[str, str] = {}
|
||||
FORMATE = ("Guide",)
|
||||
|
||||
# Geforderter Score je Freischalt-Niveau — nur für die Sperr-Meldung.
|
||||
# 4 Lernstufen (Floor in % des cap) — Schlüssel aus lernen.STUFEN.
|
||||
_LEVEL_WORT = {
|
||||
"absolviert": "absolvieren (alle Bausteine auf 6)",
|
||||
"verstanden": "verstehen (alle Bausteine auf 12)",
|
||||
"gemeistert": "meistern (alle Bausteine auf 18)",
|
||||
"anfaenger": "auf Anfänger (20 %)",
|
||||
"fortgeschritten": "auf Fortgeschritten (40 %)",
|
||||
"experte": "auf Experte (60 %)",
|
||||
"meister": "meistern (100 %)",
|
||||
}
|
||||
|
||||
|
||||
async def lade_lernstand() -> tuple[list[dict], dict[str, set[str]], dict[str, dict[str, set[str]]]]:
|
||||
"""Guides + Kapitel-Fortschritt + Bausteine je Meilenstein.
|
||||
"""Guides + Kapitel-Fortschritt + Bausteine je Stufe.
|
||||
|
||||
levels: {"absolviert"/"verstanden"/"gemeistert": {topic → normalisierte Titel}}.
|
||||
levels: {"anfaenger"/"fortgeschritten"/"experte"/"meister": {topic → normalisierte Titel}}.
|
||||
Stufe je Baustein wird aus Score + cap (2×relevante Subs) abgeleitet.
|
||||
"""
|
||||
roh = await list_baustein_levels_all()
|
||||
levels = {
|
||||
stufe: {topic: {_norm_titel(b) for b in titel} for topic, titel in pro_topic.items()}
|
||||
for stufe, pro_topic in roh.items()
|
||||
}
|
||||
scores = await list_baustein_scores_all()
|
||||
caps = await subs_count_alle()
|
||||
levels: dict[str, dict[str, set[str]]] = {key: {} for key, _ in STUFEN}
|
||||
for topic, baustein, score in scores:
|
||||
cap = cap_fuer(caps.get((topic, _norm_titel(baustein)), 0))
|
||||
for key, p in STUFEN:
|
||||
if score >= _schwelle(p, cap):
|
||||
levels[key].setdefault(topic, set()).add(_norm_titel(baustein))
|
||||
return await list_guides(), await list_progress_all(), levels
|
||||
|
||||
|
||||
@@ -91,13 +97,13 @@ def ist_level(topic: str, fmt: str, guides: list[dict], progress: dict[str, set[
|
||||
|
||||
|
||||
def ist_absolviert(topic: str, fmt: str, guides: list[dict], progress: dict[str, set[str]], levels: dict[str, dict[str, set[str]]]) -> bool:
|
||||
"""Alle Bausteine des neuesten fertigen Guides absolviert (≥3)?"""
|
||||
return ist_level(topic, fmt, guides, progress, levels["absolviert"])
|
||||
"""Alle Bausteine des neuesten fertigen Guides mindestens Anfänger (≥20 %)?"""
|
||||
return ist_level(topic, fmt, guides, progress, levels["anfaenger"])
|
||||
|
||||
|
||||
def thema_abgeschlossen(topic: str, guides: list[dict], progress: dict[str, set[str]], levels: dict[str, dict[str, set[str]]]) -> bool:
|
||||
"""Thema fertig: neuester fertiger Guide, alle Bausteine gemeistert (18)?"""
|
||||
return ist_level(topic, "Guide", guides, progress, levels["gemeistert"])
|
||||
"""Thema fertig: neuester fertiger Guide, alle Bausteine auf Meister (100 %)?"""
|
||||
return ist_level(topic, "Guide", guides, progress, levels["meister"])
|
||||
|
||||
|
||||
def formate_stats(guides: list[dict], progress: dict[str, set[str]], levels: dict[str, dict[str, set[str]]]) -> dict:
|
||||
@@ -105,7 +111,7 @@ def formate_stats(guides: list[dict], progress: dict[str, set[str]], levels: dic
|
||||
formate = {}
|
||||
for fmt in FORMATE:
|
||||
neueste = _neueste_done(guides, fmt)
|
||||
absolviert = sum(1 for g in neueste.values() if _guide_alle(g, progress, levels["absolviert"]))
|
||||
absolviert = sum(1 for g in neueste.values() if _guide_alle(g, progress, levels["anfaenger"]))
|
||||
formate[fmt] = {"erstellt": len(neueste), "absolviert": absolviert}
|
||||
return formate
|
||||
|
||||
|
||||
Reference in New Issue
Block a user