from flask import jsonify, request from werkzeug.wrappers import Response import screens from core.flask_app import app @app.route("/game//screens//flow/edges/add", methods=["POST"]) def flow_edge_add(slug: str, screen_id: int) -> Response | tuple[Response, int]: payload = request.get_json(force=True) or {} try: from_node_id = int(payload["from_node_id"]) to_node_id = int(payload["to_node_id"]) except (KeyError, TypeError, ValueError): return jsonify({"error": "nœuds invalides"}), 400 from_node = screens.get_flow_node(slug, from_node_id) to_node = screens.get_flow_node(slug, to_node_id) if not from_node or not to_node: return jsonify({"error": "nœuds invalides"}), 400 if from_node.get("block_id") != to_node.get("block_id"): # Un bloc de logique est un automate fermé (voir screens/flow/blocks/) : # aucun câble entre deux blocs différents, toute communication passe # par les événements personnalisés (declencher_evenement). return jsonify({"error": "Impossible de relier deux nœuds de blocs différents"}), 400 edge_id = screens.add_flow_edge(slug, screen_id, from_node_id, payload.get("from_port", "out"), to_node_id) return jsonify({"id": edge_id})