Fragen & Wörter nach Generate it anzeigen und löschen können

- Neue Endpoints: GET /api/object/<id>/questions+words, DELETE /api/question/<id>, DELETE /api/word/<id>
- GenerateIt: Wörter-Sidebar mit ×-Chips, Fragen-Sidebar mit Level-Badge und ×
- Laden beim Objekt-Wechsel und nach Generate it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 10:32:22 +02:00
parent 2755632524
commit 0f83210aec
3 changed files with 185 additions and 16 deletions

50
app.py
View File

@@ -1164,6 +1164,56 @@ def publish_questions(obj_id: str):
})
@app.route("/api/object/<obj_id>/questions", methods=["GET"])
def get_object_questions_list(obj_id: str):
"""Gibt alle verknüpften Fragen eines Objekts zurück."""
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)
return jsonify({"data": items})
@app.route("/api/object/<obj_id>/words", methods=["GET"])
def get_object_words_list(obj_id: str):
"""Gibt alle verknüpften Wörter eines Objekts zurück."""
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 "")
return jsonify({"data": items})
@app.route("/api/question/<q_id>", methods=["DELETE"])
def delete_question_item(q_id: str):
"""Löscht eine Frage aus Directus."""
token = request.headers.get("Authorization", "")
_, status = _directus("DELETE", f"/items/questions/{q_id}", token)
if status in (200, 204):
return jsonify({"ok": True})
return jsonify({"error": "Delete failed"}), status
@app.route("/api/word/<w_id>", methods=["DELETE"])
def delete_word_item(w_id: str):
"""Löscht ein Wort aus Directus."""
token = request.headers.get("Authorization", "")
_, status = _directus("DELETE", f"/items/words/{w_id}", token)
if status in (200, 204):
return jsonify({"ok": True})
return jsonify({"error": "Delete failed"}), status
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)