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 des déclencheurs + target_element_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.""" 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")} 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