import db from ..flow.ensure_flow_schema import ensure_flow_schema def delete_custom_event(slug: str, event_id: int) -> None: """Seule suppression d'entité game-wide du moteur qui cascade RÉELLEMENT (demande explicite) : une variable globale ou une définition d'objet supprimée laisse des références pendantes tolérées ailleurs (voir db/global_vars/, db/definitions/) — un événement, lui, doit emporter avec lui TOUS ses écouteurs (nœuds Déclencheur, trigger_custom_event_id) et déclencheurs (nœuds Action, target_custom_event_id), sur TOUS les écrans ET modèles à la fois (aucun filtre screen_id, comme screens/elements/delete_element.py — un modèle est un écran caché, même table _flow_nodes).""" ensure_flow_schema(slug) conn = db.connect(slug) conn.execute( """DELETE FROM _flow_edges WHERE from_node_id IN (SELECT id FROM _flow_nodes WHERE trigger_custom_event_id = ? OR target_custom_event_id = ?) OR to_node_id IN (SELECT id FROM _flow_nodes WHERE trigger_custom_event_id = ? OR target_custom_event_id = ?)""", (event_id, event_id, event_id, event_id), ) conn.execute( "DELETE FROM _flow_nodes WHERE trigger_custom_event_id = ? OR target_custom_event_id = ?", (event_id, event_id), ) conn.execute("DELETE FROM _custom_events WHERE id = ?", (event_id,)) conn.commit() conn.close()