Polygon-Schließen per Button + M2M-Setup-Route entfernt

- Polygon kann nun mit ≥2 Punkten über den Button geschlossen werden
- Button zeigt "Polygon schließen & hinzufügen" solange Polygon offen ist
- Automatisches Schließen (Verbindung zum Startpunkt) beim Klick
- Einmalige Setup-Route /api/directus/setup-m2m entfernt (nicht mehr benötigt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-25 20:53:14 +02:00
parent 343d6a2389
commit 4cd8a63a3d
2 changed files with 25 additions and 66 deletions

61
app.py
View File

@@ -99,67 +99,6 @@ def directus_object(obj_id):
return jsonify(data), status
@app.route("/api/directus/setup-m2m", methods=["POST"])
def directus_setup_m2m():
"""Einmalig: m2m-Relationen für categories und questions auf objects anlegen."""
token = request.headers.get("Authorization", "")
results = []
for rel_name, related_table, related_fk in [
("categories", "categories", "categories_id"),
("questions", "questions", "questions_id"),
]:
junction = f"objects_{rel_name}"
# 1. Altes m2o-Feld entfernen
d, s = _directus("DELETE", f"/fields/objects/{rel_name}", token)
results.append({"step": f"delete_m2o_{rel_name}", "status": s})
# 2. Junction-Collection anlegen
d, s = _directus("POST", "/collections", token, {
"collection": junction,
"meta": {"hidden": True, "icon": "import_export"},
"schema": {},
})
results.append({"step": f"create_junction_{junction}", "status": s})
# 3. Felder der Junction
for field_def in [
{"field": "id", "type": "integer", "schema": {"has_auto_increment": True, "is_primary_key": True, "is_nullable": False}, "meta": {"hidden": True}},
{"field": "objects_id","type": "uuid", "schema": {"foreign_key_table": "objects", "foreign_key_column": "id", "is_nullable": False}, "meta": {"hidden": True}},
{"field": related_fk, "type": "uuid", "schema": {"foreign_key_table": related_table, "foreign_key_column": "id", "is_nullable": False}, "meta": {"hidden": True}},
]:
d, s = _directus("POST", f"/fields/{junction}", token, field_def)
results.append({"step": f"field_{junction}_{field_def['field']}", "status": s})
# 4. Relation junction.objects_id → objects (mit back-reference)
d, s = _directus("POST", "/relations", token, {
"collection": junction, "field": "objects_id",
"related_collection": "objects",
"meta": {"one_field": rel_name, "junction_field": related_fk, "sort_field": None},
"schema": {"on_delete": "CASCADE"},
})
results.append({"step": f"relation_{junction}_objects", "status": s})
# 5. Relation junction.related_fk → related_table
d, s = _directus("POST", "/relations", token, {
"collection": junction, "field": related_fk,
"related_collection": related_table,
"schema": {"on_delete": "CASCADE"},
})
results.append({"step": f"relation_{junction}_{rel_name}", "status": s})
# 6. Alias-Feld auf objects (m2m)
d, s = _directus("POST", "/fields/objects", token, {
"field": rel_name, "type": "alias",
"meta": {"interface": "list-m2m", "special": ["m2m"], "hidden": False, "width": "full"},
"schema": None,
})
results.append({"step": f"alias_{rel_name}", "status": s})
return jsonify({"results": results})
@app.route("/api/images", methods=["GET"])
def list_images():
"""