def blocks_view(flow_blocks, flow_nodes, elements_labels): """Enrichit chaque bloc (nom/description bruts) avec son nombre de nœuds et les éléments qu'il concerne (trigger_element_id/ trigger_object_id des déclencheurs + target_element_id/ target_object_id des actions, dédoublonnés) — calculé en Python à partir de ce que routes/screens/screen_edit.py a déjà chargé, sans requête SQL supplémentaire. trigger_object_id/target_object_id (fondations multi-éditeurs, objets de scène) sont toujours None sur un jeu "document" — sans effet sur son comportement existant.""" nodes_by_block = {} for n in flow_nodes: nodes_by_block.setdefault(n.get("block_id"), []).append(n) view = [] for b in flow_blocks: block_nodes = nodes_by_block.get(b["id"], []) element_ids = {n["trigger_element_id"] for n in block_nodes if n.get("trigger_element_id")} element_ids |= {n["target_element_id"] for n in block_nodes if n.get("target_element_id")} element_ids |= {n["trigger_object_id"] for n in block_nodes if n.get("trigger_object_id")} element_ids |= {n["target_object_id"] for n in block_nodes if n.get("target_object_id")} view.append({ **b, "node_count": len(block_nodes), "element_labels": [elements_labels[eid] for eid in element_ids if eid in elements_labels], }) return view