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})