This commit is contained in:
team3
2026-07-13 20:04:30 +02:00
parent c16ef5415f
commit 7d31467498
5 changed files with 83 additions and 17 deletions

View File

@@ -323,15 +323,18 @@ def ueben_antwort(a: UebenAntwort):
@app.get("/api/topics/{topic}/baustein/{baustein_id}/karten")
def baustein_karten(topic: str, baustein_id: int):
# Flashcards genau dieses Bausteins — NICHT faellig-gefiltert (gerade gelesen → jetzt
# prüfen). Beantwortet wird über /api/ueben/antwort, Leitner-Spacing bleibt intakt.
rows = db.query(
"SELECT ar.id, ar.inhalt, a.titel, a.level, COALESCE(l.box,1) AS box"
" FROM artefakte ar JOIN atome a ON ar.atom_id=a.id"
" LEFT JOIN leitner l ON l.artefakt_id=ar.id"
" WHERE a.topic=? AND a.baustein_id=? AND ar.typ='flashcard'"
" AND ar.status='verifiziert' ORDER BY a.ord, ar.id", (topic, baustein_id))
def baustein_karten(topic: str, baustein_id: int, alle: bool = False):
# Absolvierte Karten (richtig beantwortet → Leitner-faellig in der Zukunft)
# bleiben draußen — der Abruf startet nicht bei jedem Besuch von vorn.
# alle=True zeigt den vollen Stapel (Button „Alle erneut üben").
sql = ("SELECT ar.id, ar.inhalt, a.titel, a.level, COALESCE(l.box,1) AS box"
" FROM artefakte ar JOIN atome a ON ar.atom_id=a.id"
" LEFT JOIN leitner l ON l.artefakt_id=ar.id"
" WHERE a.topic=? AND a.baustein_id=? AND ar.typ='flashcard'"
" AND ar.status='verifiziert'")
if not alle:
sql += " AND COALESCE(l.faellig, date('now')) <= date('now')"
rows = db.query(sql + " ORDER BY a.ord, ar.id", (topic, baustein_id))
return [{**r, "inhalt": db.uj(r["inhalt"], {})} for r in rows]