This commit is contained in:
team3
2026-06-23 12:04:17 +02:00
parent 9a02e8dc76
commit cd1c926599
2 changed files with 15 additions and 11 deletions

View File

@@ -251,7 +251,9 @@ def _bausteine_files(topic: str) -> dict:
def _alle_slot_dateien(files: dict) -> list[Path]: def _alle_slot_dateien(files: dict) -> list[Path]:
arbeit = files["arbeit"] arbeit = files["arbeit"]
# Subbaustein-/Stufen-Slots sind pro Chunk dynamisch — per Glob einsammeln. # Subbaustein-/Stufen-Slots sind pro Chunk dynamisch — per Glob einsammeln.
dyn = (list(arbeit.glob("subbaustein-*")) + list(arbeit.glob("stufe-*")) + list(arbeit.glob("relevanz-*")) + list(arbeit.glob("frage-muster-*"))) if arbeit.is_dir() else [] dyn = (list(arbeit.glob("subbaustein-*")) + list(arbeit.glob("stufe-*")) + list(arbeit.glob("relevanz-*"))
+ list(arbeit.glob("frage-muster-*")) + list(arbeit.glob("recherche-*")) + list(arbeit.glob("konsolidierung-*"))
+ list(arbeit.glob("klaerung*"))) if arbeit.is_dir() else []
return [ return [
*files["recherche"], files["recherche_mapping"], *files["recherche"], files["recherche_mapping"],
*(p for slots in files["auswahl"].values() for p in slots), *(p for slots in files["auswahl"].values() for p in slots),
@@ -322,16 +324,18 @@ def active_bausteine() -> list[dict]:
def reset_bausteine(topic: str) -> None: def reset_bausteine(topic: str) -> None:
files = _bausteine_files(topic) """„Löschen": räumt nur die generierten Bausteine weg (Dateien ab Inventar). BEHÄLT
files["final"].unlink(missing_ok=True) Quelle (quelle.json), Crawl-Ordner und Sichtung. Voller Wipe inkl. Quelle/Crawl nur
files["sidecar"].unlink(missing_ok=True) # liegt im Themen-Root, nicht in arbeit/ über „Thema löschen" (DELETE /topics → rmtree(topic_dir))."""
files["frage_muster"].unlink(missing_ok=True) # ebenfalls im Themen-Root _reset_ab_phase(topic, "Inventar")
quelle_path(topic).unlink(missing_ok=True)
shutil.rmtree(quelle_crawl_dir(topic), ignore_errors=True) # gecrawlte Link-Quelle
shutil.rmtree(files["arbeit"], ignore_errors=True)
_bausteine_errors.pop(topic, None) _bausteine_errors.pop(topic, None)
async def reset_bausteine_db(topic: str) -> None:
"""DB-Pendant zu reset_bausteine: Inventar…Fragen aus der DB; Coverage/Sichtung + Quelle bleiben."""
await _reset_db_ab_phase(topic, "Inventar")
def _phase_idx(label: str) -> int: def _phase_idx(label: str) -> int:
"""Index der groben Phase in der kanonischen Reihenfolge (Quelle=0 … Fragen=5).""" """Index der groben Phase in der kanonischen Reihenfolge (Quelle=0 … Fragen=5)."""
order = [l for l, _ in PHASEN] order = [l for l, _ in PHASEN]

View File

@@ -17,7 +17,7 @@ from database import (
set_baustein_score, set_baustein_absolviert, set_baustein_verstanden, set_baustein_gemeistert, delete_baustein_daten, set_baustein_score, set_baustein_absolviert, set_baustein_verstanden, set_baustein_gemeistert, delete_baustein_daten,
delete_topic_pipeline, get_guide_content, delete_guide_content, delete_topic_pipeline, get_guide_content, delete_guide_content,
) )
from bausteine import generate_bausteine, cancel_bausteine, bausteine_status, active_bausteine, reset_bausteine, lade_quelle, lade_uebersicht, subbausteine_titel, lade_frage_muster from bausteine import generate_bausteine, cancel_bausteine, bausteine_status, active_bausteine, reset_bausteine, reset_bausteine_db, 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 elements import generate_element, chat_with_guide, chat_with_element, check_element, style_element, refine_suggestion
from lernen import NOETIG, MASTERY, MEISTERN, NIVEAUS, 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_meilensteinen, _zufall_malus from lernen import NOETIG, MASTERY, MEISTERN, NIVEAUS, 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_meilensteinen, _zufall_malus
from guide import generate_guide, guide_slot_dateien, guide_fertig_step from guide import generate_guide, guide_slot_dateien, guide_fertig_step
@@ -172,8 +172,8 @@ async def cancel_bausteine_route(topic: str):
@router.delete("/bausteine") @router.delete("/bausteine")
async def remove_bausteine(topic: str): async def remove_bausteine(topic: str):
reset_bausteine(topic) reset_bausteine(topic) # Dateien ab Inventar — Quelle/Crawl bleiben
await delete_topic_pipeline(topic) await reset_bausteine_db(topic) # DB ab Inventar — Coverage/Sichtung + Quelle bleiben
return {"ok": True} return {"ok": True}