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:
38
app.py
38
app.py
@@ -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})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user