Fix: 2-Schritt-Query für questions/words ohne konfigurierte Directus-Relationen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 10:49:53 +02:00
parent 1bc6d8b30f
commit a37189ce3c

38
app.py
View File

@@ -1166,31 +1166,33 @@ def publish_questions(obj_id: str):
@app.route("/api/object/<obj_id>/questions", methods=["GET"]) @app.route("/api/object/<obj_id>/questions", methods=["GET"])
def get_object_questions_list(obj_id: str): def get_object_questions_list(obj_id: str):
"""Gibt alle verknüpften Fragen eines Objekts zurück.""" """Gibt alle verknüpften Fragen eines Objekts zurück (2-Schritt-Query)."""
token = request.headers.get("Authorization", "") token = request.headers.get("Authorization", "")
fields = "questions_id.id,questions_id.question_de,questions_id.answer_de,questions_id.level,questions_id.status" junc, _ = _directus("GET",
data, _ = _directus( f"/items/questions_objects?filter[objects_id][_eq]={obj_id}&fields=questions_id&limit=200", token)
"GET", q_ids = [e["questions_id"] for e in (junc.get("data") or []) if e.get("questions_id")]
f"/items/questions_objects?filter[objects_id][_eq]={obj_id}&fields={fields}&limit=200", if not q_ids:
token, return jsonify({"data": []})
) ids_param = urllib.parse.quote(",".join(q_ids), safe="")
items = [e["questions_id"] for e in (data.get("data") or []) if e.get("questions_id")] q_data, _ = _directus("GET",
items.sort(key=lambda x: x.get("level") or 0) f"/items/questions?filter[id][_in]={ids_param}&fields=id,question_de,answer_de,level,status&limit=200", token)
items = sorted(q_data.get("data") or [], key=lambda x: x.get("level") or 0)
return jsonify({"data": items}) return jsonify({"data": items})
@app.route("/api/object/<obj_id>/words", methods=["GET"]) @app.route("/api/object/<obj_id>/words", methods=["GET"])
def get_object_words_list(obj_id: str): def get_object_words_list(obj_id: str):
"""Gibt alle verknüpften Wörter eines Objekts zurück.""" """Gibt alle verknüpften Wörter eines Objekts zurück (2-Schritt-Query)."""
token = request.headers.get("Authorization", "") token = request.headers.get("Authorization", "")
fields = "words_id.id,words_id.title_de,words_id.level,words_id.status" junc, _ = _directus("GET",
data, _ = _directus( f"/items/words_objects?filter[objects_id][_eq]={obj_id}&fields=words_id&limit=2000", token)
"GET", w_ids = [e["words_id"] for e in (junc.get("data") or []) if e.get("words_id")]
f"/items/words_objects?filter[objects_id][_eq]={obj_id}&fields={fields}&limit=2000", if not w_ids:
token, return jsonify({"data": []})
) ids_param = urllib.parse.quote(",".join(w_ids), safe="")
items = [e["words_id"] for e in (data.get("data") or []) if e.get("words_id")] w_data, _ = _directus("GET",
items.sort(key=lambda x: x.get("title_de") or "") f"/items/words?filter[id][_in]={ids_param}&fields=id,title_de,level,status&limit=2000", token)
items = sorted(w_data.get("data") or [], key=lambda x: x.get("title_de") or "")
return jsonify({"data": items}) return jsonify({"data": items})