Debug: Purge-Details im Alert anzeigen (Status-Breakdown pro Collection)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 21:05:48 +02:00
parent a1e2a01fad
commit f9b3714705
2 changed files with 29 additions and 8 deletions

30
app.py
View File

@@ -1313,6 +1313,7 @@ def purge_all_orphans():
"""
token = request.headers.get("Authorization", "")
removed = 0
details = []
for junc_col, fk_field, item_col in [
("questions_objects", "questions_id", "questions"),
@@ -1322,16 +1323,21 @@ def purge_all_orphans():
f"/items/{junc_col}?fields=id,{fk_field}&limit=10000", token)
rows = junc_data.get("data") or []
# collect all unique FK values
fk_ids = list({row[fk_field] for row in rows if row.get(fk_field)})
if not fk_ids:
details.append({"collection": junc_col, "junction_rows": 0, "existing": 0, "orphans": 0})
continue
# 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}&filter[status][_neq]=archived&fields=id&limit=10000", token)
existing_ids = {e["id"] for e in (existing_data.get("data") or [])}
# fetch existing AND check all statuses (fetch without status filter first)
ids_param = urllib.parse.quote(",".join(fk_ids), safe="")
all_data, _ = _directus("GET",
f"/items/{item_col}?filter[id][_in]={ids_param}&fields=id,status&limit=10000", token)
all_items = all_data.get("data") or []
existing_ids = {e["id"] for e in all_items if e.get("status") not in ("archived", "deleted")}
status_summary = {}
for e in all_items:
s = e.get("status", "unknown")
status_summary[s] = status_summary.get(s, 0) + 1
orphan_junc_ids = [row["id"] for row in rows
if row.get(fk_field) and row[fk_field] not in existing_ids]
@@ -1339,7 +1345,17 @@ def purge_all_orphans():
_directus("DELETE", f"/items/{junc_col}", token, orphan_junc_ids)
removed += len(orphan_junc_ids)
return jsonify({"ok": True, "orphans_removed": removed})
details.append({
"collection": junc_col,
"junction_rows": len(rows),
"fk_unique": len(fk_ids),
"items_found": len(all_items),
"status_breakdown": status_summary,
"existing_active": len(existing_ids),
"orphans_removed": len(orphan_junc_ids),
})
return jsonify({"ok": True, "orphans_removed": removed, "details": details})
@app.route("/api/fix-distractor-field", methods=["POST"])