from flask import jsonify, request import screens from core.flask_app import app @app.route("/game//flow/nodes//run-data", methods=["POST"]) def flow_node_run_data(slug, node_id): """Exécuté côté serveur au moment du clic, en mode jouable, pour un nœud Action de type "Modifier une donnée d'un objet" — identique au fonctionnement de l'ancienne action_run_data, mais lit sa config depuis un nœud du graphe de logique plutôt que depuis la table _actions. Si le nœud vise CLICKED_ROW_ID (voir "Ligne cliquée (Répéteur)" dans screen_edit.html) ou EVENT_ROW_ID (la ligne transmise par un événement personnalisé en cours, voir screens/custom_events/), la vraie ligne n'est connue qu'au moment de l'exécution — le client (play.html) la transmet dans le corps JSON de cette requête, et elle remplace ici target_row_id avant d'exécuter l'action.""" node = screens.get_flow_node(slug, node_id) if not node or node.get("node_type") != "action" or node.get("action_type") != "modifier_donnee": return jsonify({"ok": False}), 400 if node.get("target_row_id") == screens.CLICKED_ROW_ID: body = request.get_json(silent=True) or {} node = {**node, "target_row_id": body.get("clicked_row_id")} elif node.get("target_row_id") == screens.EVENT_ROW_ID: body = request.get_json(silent=True) or {} node = {**node, "target_row_id": body.get("event_row_id")} ok = screens.apply_data_action(slug, node) return jsonify({"ok": ok})