Fix: Archived Directus items als gelöscht behandeln
Directus archiviert Items beim Löschen (status=archived) statt hart zu löschen. - Questions/Words-Query filtert archived heraus (filter[status][_neq]=archived) - Purge-Endpoints behandeln archived items als nicht-existent → Junction-Zeilen werden entfernt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
15
app.py
15
app.py
@@ -1192,10 +1192,10 @@ def get_object_questions_list(obj_id: str):
|
||||
if not q_ids:
|
||||
return jsonify({"data": []})
|
||||
|
||||
# Schritt 2: Fragen laden (inkl. short_answer_de)
|
||||
# Schritt 2: Fragen laden (inkl. short_answer_de) – archivierte ausschließen
|
||||
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,short_answer_de,level,status&limit=200", token)
|
||||
f"/items/questions?filter[id][_in]={ids_param}&filter[status][_neq]=archived&fields=id,question_de,answer_de,short_answer_de,level,status&limit=200", token)
|
||||
items = sorted(q_data.get("data") or [], key=lambda x: x.get("level") or 0)
|
||||
|
||||
# Schritt 3: Distractor-Wörter pro Frage (Bulk)
|
||||
@@ -1237,7 +1237,7 @@ def get_object_words_list(obj_id: str):
|
||||
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)
|
||||
f"/items/words?filter[id][_in]={ids_param}&filter[status][_neq]=archived&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})
|
||||
|
||||
@@ -1296,8 +1296,9 @@ def purge_orphan_junctions(obj_id: str):
|
||||
fk_val = row.get(fk_field)
|
||||
if not fk_val:
|
||||
continue
|
||||
item_data, s = _directus("GET", f"/items/{item_col}/{fk_val}?fields=id", token)
|
||||
if s != 200 or not item_data.get("data"):
|
||||
item_data, s = _directus("GET", f"/items/{item_col}/{fk_val}?fields=id,status", token)
|
||||
item = item_data.get("data") or {}
|
||||
if s != 200 or not item or item.get("status") == "archived":
|
||||
_directus("DELETE", f"/items/{junc_col}/{row['id']}", token)
|
||||
removed += 1
|
||||
|
||||
@@ -1326,10 +1327,10 @@ def purge_all_orphans():
|
||||
if not fk_ids:
|
||||
continue
|
||||
|
||||
# fetch which IDs still exist in one bulk call
|
||||
# fetch which IDs still exist AND are not archived
|
||||
ids_param = ",".join(fk_ids)
|
||||
existing_data, _ = _directus("GET",
|
||||
f"/items/{item_col}?filter[id][_in]={ids_param}&fields=id&limit=10000", token)
|
||||
f"/items/{item_col}?filter[id][_in]={ids_param}&filter[status][_neq]=archived&fields=id&limit=10000", token)
|
||||
existing_ids = {e["id"] for e in (existing_data.get("data") or [])}
|
||||
|
||||
orphan_junc_ids = [row["id"] for row in rows
|
||||
|
||||
Reference in New Issue
Block a user