Fix: Tagesübung nur JS-kompatible exercise_ids, Scroll per exercise_id; Landing+llms.txt Sprint-20 — SW by-v492, APP_VER 469
This commit is contained in:
parent
fe2e718827
commit
175984e80f
7 changed files with 78 additions and 36 deletions
|
|
@ -159,34 +159,32 @@ async def get_welcome_dashboard(dog_id: int, user=Depends(get_current_user)):
|
|||
"SELECT COUNT(*) AS n FROM diary WHERE dog_id=?", (dog_id,)
|
||||
).fetchone()["n"]
|
||||
|
||||
# Tagesübung — personalisiert aus exercise_progress, tagesstabil
|
||||
# Tagesübung — aus exercise_progress im JS-Format (tab_Name), tagesstabil
|
||||
import datetime as _dt
|
||||
day_num = (_dt.date.today() - _dt.date(2024, 1, 1)).days
|
||||
|
||||
# Übungen in Bearbeitung (noch-nicht / manchmal / meistens), älteste zuerst
|
||||
in_progress = conn.execute(
|
||||
"""SELECT ep.exercise_id, te.name, te.kategorie, te.schwierigkeit
|
||||
FROM exercise_progress ep
|
||||
JOIN training_exercises te ON te.exercise_id = ep.exercise_id
|
||||
WHERE ep.user_id = ? AND ep.status IN ('noch-nicht', 'manchmal', 'meistens')
|
||||
ORDER BY ep.updated_at ASC LIMIT 20""",
|
||||
# Nur exercise_ids im JS-Format (starten mit bekanntem Tab-Namen)
|
||||
_KNOWN_PREFIXES = ('grundkommandos_', 'tricks_', 'problemverhalten_', 'grundlagen_')
|
||||
raw_progress = conn.execute(
|
||||
"""SELECT exercise_id FROM exercise_progress
|
||||
WHERE user_id = ? AND status IN ('noch-nicht', 'manchmal', 'meistens')
|
||||
ORDER BY updated_at ASC LIMIT 50""",
|
||||
(user["id"],)
|
||||
).fetchall()
|
||||
|
||||
valid = [r["exercise_id"] for r in raw_progress
|
||||
if any(r["exercise_id"].startswith(p) for p in _KNOWN_PREFIXES)]
|
||||
|
||||
daily_exercise = None
|
||||
if in_progress:
|
||||
daily_exercise = dict(in_progress[day_num % len(in_progress)])
|
||||
else:
|
||||
# Fallback: globale Rotation über alle Übungen
|
||||
exercise_count = conn.execute(
|
||||
"SELECT COUNT(*) AS n FROM training_exercises"
|
||||
).fetchone()["n"]
|
||||
if exercise_count:
|
||||
ex_row = conn.execute(
|
||||
"SELECT exercise_id, name, kategorie, schwierigkeit FROM training_exercises ORDER BY id LIMIT 1 OFFSET ?",
|
||||
(day_num % exercise_count,)
|
||||
).fetchone()
|
||||
daily_exercise = dict(ex_row) if ex_row else None
|
||||
if valid:
|
||||
ex_id = valid[day_num % len(valid)]
|
||||
# Tab + Name aus exercise_id ableiten
|
||||
for prefix in _KNOWN_PREFIXES:
|
||||
if ex_id.startswith(prefix):
|
||||
tab = prefix.rstrip('_')
|
||||
name = ex_id[len(prefix):].replace('_', ' ')
|
||||
daily_exercise = {"exercise_id": ex_id, "name": name, "kategorie": tab}
|
||||
break
|
||||
|
||||
return {
|
||||
"random_photo": random_photo,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue