# endpoints/person_network.py from flask import Blueprint, jsonify import neo4j from neo4j import GraphDatabase from app import get_driver, neo4j_logger bp = Blueprint('network', __name__) @bp.route('/person_network', methods=['GET']) def person_network(): driver = get_driver() try: with driver.session() as session: query = """ MATCH (p:Person)-[r]->(n) RETURN p, r, n """ result = session.run(query) nodes = {} links = [] for record in result: person_node = record['p'] relationship = record['r'] connected_node = record['n'] # Add Person node if not already added person_id = person_node.id if person_id not in nodes: properties = {key: value for key, value in person_node.items()} properties['id'] = person_id properties['labels'] = list(person_node.labels) # Include labels separately nodes[person_id] = { **properties, "group": 1 # Group for Person } # Add connected node if not already added connected_id = connected_node.id if connected_id not in nodes: properties = {key: value for key, value in connected_node.items()} properties['id'] = connected_id properties['labels'] = list(connected_node.labels) # Include labels separately nodes[connected_id] = { **properties, "group": 2 # Group for other nodes (e.g., Organization, Position) } # Add link links.append({ "source": person_id, "target": connected_id, "type": relationship.type, "rel_properties": {key: value for key, value in relationship.items()} }) return jsonify({"nodes": list(nodes.values()), "links": links}) except Exception as e: print(f"Error interacting with Neo4j: {e}") return jsonify({"error": f"An error occurred while interacting with the database: {str(e)}"}), 500