Cleanup: training_exercises.js_exercise_id — ID-Mismatch bereinigt, JOIN mit exercise_progress, Fuß-Umbenennung — SW by-v508, APP_VER 485
This commit is contained in:
parent
9e9b87af35
commit
ad3b73d687
5 changed files with 75 additions and 31 deletions
|
|
@ -159,36 +159,58 @@ 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 — aus exercise_progress im JS-Format (tab_Name), tagesstabil
|
||||
# Tagesübung — JOIN mit training_exercises via js_exercise_id, tagesstabil
|
||||
import datetime as _dt
|
||||
day_num = (_dt.date.today() - _dt.date(2024, 1, 1)).days
|
||||
|
||||
# Nur exercise_ids im JS-Format (starten mit bekanntem Tab-Namen)
|
||||
_KNOWN_PREFIXES = (
|
||||
'grundkommandos_', 'tricks_', 'problemverhalten_',
|
||||
'mentale-auslastung_', 'hundesport_', 'koerperpflege_', 'welpe-basics_',
|
||||
'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)]
|
||||
# Versuche JOIN (funktioniert wenn js_exercise_id-Spalte vorhanden)
|
||||
try:
|
||||
joined = conn.execute(
|
||||
"""SELECT ep.exercise_id, te.name, te.kategorie AS kategorie_raw,
|
||||
te.schwierigkeit, te.js_exercise_id
|
||||
FROM exercise_progress ep
|
||||
JOIN training_exercises te ON te.js_exercise_id = ep.exercise_id
|
||||
WHERE ep.user_id = ? AND ep.status IN ('noch-nicht', 'manchmal', 'meistens')
|
||||
ORDER BY ep.updated_at ASC LIMIT 50""",
|
||||
(user["id"],)
|
||||
).fetchall()
|
||||
except Exception:
|
||||
joined = []
|
||||
|
||||
daily_exercise = 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
|
||||
if joined:
|
||||
row = joined[day_num % len(joined)]
|
||||
# Tab-ID aus exercise_id ableiten (alles vor erstem '_' + '_')
|
||||
ex_id = row["exercise_id"]
|
||||
tab = ex_id.split('_')[0] if '_' in ex_id else ex_id
|
||||
daily_exercise = {
|
||||
"exercise_id": ex_id,
|
||||
"name": row["name"],
|
||||
"kategorie": tab,
|
||||
"schwierigkeit": row["schwierigkeit"],
|
||||
}
|
||||
else:
|
||||
# Fallback: exercise_progress ohne JOIN (Legacy-IDs ohne Matching in DB)
|
||||
_KNOWN_PREFIXES = (
|
||||
'grundkommandos_', 'tricks_', 'problemverhalten_',
|
||||
'mentale-auslastung_', 'hundesport_', 'koerperpflege_', 'welpe-basics_',
|
||||
)
|
||||
raw = 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
|
||||
if any(r["exercise_id"].startswith(p) for p in _KNOWN_PREFIXES)]
|
||||
if valid:
|
||||
ex_id = valid[day_num % len(valid)]
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ async def get_exercises():
|
|||
}
|
||||
with db() as conn:
|
||||
rows = conn.execute("""
|
||||
SELECT exercise_id, name, kategorie, schwierigkeit, alter_ab,
|
||||
SELECT exercise_id, js_exercise_id, name, kategorie, schwierigkeit, alter_ab,
|
||||
dauer, beschreibung, schritte, tipp
|
||||
FROM training_exercises ORDER BY kategorie, name
|
||||
""").fetchall()
|
||||
|
|
@ -37,9 +37,10 @@ async def get_exercises():
|
|||
for r in rows:
|
||||
tab = CAT_TO_TAB.get(r['kategorie'], r['kategorie'].lower().replace(' ', '-'))
|
||||
by_tab.setdefault(tab, []).append({
|
||||
'exercise_id': r['exercise_id'],
|
||||
'name': r['name'],
|
||||
'kategorie': tab,
|
||||
'exercise_id': r['exercise_id'],
|
||||
'js_exercise_id': r['js_exercise_id'],
|
||||
'name': r['name'],
|
||||
'kategorie': tab,
|
||||
'schwierigkeit': r['schwierigkeit'] or 'mittel',
|
||||
'alter': r['alter_ab'],
|
||||
'dauer': r['dauer'],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue