From a37189ce3c6fa9aca400357c1f50e0d214780a51 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 26 Apr 2026 10:49:53 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=202-Schritt-Query=20f=C3=BCr=20questions/w?= =?UTF-8?q?ords=20ohne=20konfigurierte=20Directus-Relationen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- app.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/app.py b/app.py index daba590..114c6a9 100644 --- a/app.py +++ b/app.py @@ -1166,31 +1166,33 @@ def publish_questions(obj_id: str): @app.route("/api/object//questions", methods=["GET"]) 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", "") - fields = "questions_id.id,questions_id.question_de,questions_id.answer_de,questions_id.level,questions_id.status" - data, _ = _directus( - "GET", - f"/items/questions_objects?filter[objects_id][_eq]={obj_id}&fields={fields}&limit=200", - token, - ) - items = [e["questions_id"] for e in (data.get("data") or []) if e.get("questions_id")] - items.sort(key=lambda x: x.get("level") or 0) + junc, _ = _directus("GET", + f"/items/questions_objects?filter[objects_id][_eq]={obj_id}&fields=questions_id&limit=200", token) + q_ids = [e["questions_id"] for e in (junc.get("data") or []) if e.get("questions_id")] + if not q_ids: + return jsonify({"data": []}) + ids_param = urllib.parse.quote(",".join(q_ids), safe="") + q_data, _ = _directus("GET", + 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}) @app.route("/api/object//words", methods=["GET"]) 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", "") - fields = "words_id.id,words_id.title_de,words_id.level,words_id.status" - data, _ = _directus( - "GET", - f"/items/words_objects?filter[objects_id][_eq]={obj_id}&fields={fields}&limit=2000", - token, - ) - items = [e["words_id"] for e in (data.get("data") or []) if e.get("words_id")] - items.sort(key=lambda x: x.get("title_de") or "") + junc, _ = _directus("GET", + f"/items/words_objects?filter[objects_id][_eq]={obj_id}&fields=words_id&limit=2000", token) + w_ids = [e["words_id"] for e in (junc.get("data") or []) if e.get("words_id")] + if not w_ids: + return jsonify({"data": []}) + ids_param = urllib.parse.quote(",".join(w_ids), safe="") + w_data, _ = _directus("GET", + 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})