fix: exercises.py - use direct VARCHAR for age_groups (no catalog table in Shinkan)
Some checks failed
Deploy Development / deploy (push) Successful in 37s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 6s
Test Suite / playwright-tests (push) Failing after 2m0s

This commit is contained in:
Lars 2026-04-24 15:27:11 +02:00
parent a6ea5b95eb
commit a67cc5f812

View File

@ -142,16 +142,15 @@ def enrich_exercise_detail(exercise_id: int, cur) -> dict:
) )
exercise["target_groups"] = [r2d(r) for r in cur.fetchall()] exercise["target_groups"] = [r2d(r) for r in cur.fetchall()]
# Age Groups (M:N) - nur Namen, nicht Objekte # Age Groups (M:N) - direkt als VARCHAR gespeichert
cur.execute( cur.execute(
"""SELECT ag.name """SELECT age_group
FROM exercise_age_groups eag FROM exercise_age_groups
JOIN age_groups ag ON eag.age_group_id = ag.id WHERE exercise_id = %s
WHERE eag.exercise_id = %s ORDER BY age_group""",
ORDER BY ag.sort_order""",
(exercise_id,) (exercise_id,)
) )
exercise["age_groups"] = [r["name"] for r in cur.fetchall()] exercise["age_groups"] = [r["age_group"] for r in cur.fetchall()]
# Skills (M:N) mit Levels und Intensity # Skills (M:N) mit Levels und Intensity
cur.execute( cur.execute(
@ -226,19 +225,17 @@ def assign_exercise_relations(cur, conn, exercise_id: int, data: dict):
(exercise_id, tg["target_group_id"], tg.get("is_primary", False)) (exercise_id, tg["target_group_id"], tg.get("is_primary", False))
) )
# Age Groups (Namen → IDs lookup) # Age Groups (direkt als VARCHAR, CHECK constraint validiert)
if "age_groups" in data: if "age_groups" in data:
cur.execute("DELETE FROM exercise_age_groups WHERE exercise_id = %s", (exercise_id,)) cur.execute("DELETE FROM exercise_age_groups WHERE exercise_id = %s", (exercise_id,))
for age_group_name in data["age_groups"]: for age_group_name in data["age_groups"]:
cur.execute("SELECT id FROM age_groups WHERE name ILIKE %s", (age_group_name,)) try:
row = cur.fetchone()
if row:
cur.execute( cur.execute(
"INSERT INTO exercise_age_groups (exercise_id, age_group_id) VALUES (%s, %s)", "INSERT INTO exercise_age_groups (exercise_id, age_group) VALUES (%s, %s)",
(exercise_id, row[0]) (exercise_id, age_group_name)
) )
else: except Exception as e:
logger.warning("Age Group '%s' nicht im Katalog gefunden", age_group_name) logger.warning("Age Group '%s' ungültig: %s", age_group_name, e)
# Skills # Skills
if "skills" in data: if "skills" in data: