91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
# endpoints/list_members.py
|
|
from flask import Blueprint, request, jsonify
|
|
from neo4j import GraphDatabase
|
|
from app import get_driver, neo4j_logger
|
|
|
|
bp = Blueprint('list_members', __name__)
|
|
|
|
@bp.route('/list_members', methods=['GET'])
|
|
@bp.route('/list_members', methods=['GET'])
|
|
def list_members():
|
|
member_name = request.args.get('member_name')
|
|
|
|
if not member_name:
|
|
return jsonify({"error": "No member name provided"}), 400
|
|
|
|
driver = get_driver()
|
|
|
|
try:
|
|
with driver.session() as session:
|
|
result = session.run("""
|
|
MATCH (m:Person {name: $memberName})-[*]-(n)
|
|
WITH m, n, COLLECT(DISTINCT (m)-[r]->(n)) AS rels
|
|
RETURN {
|
|
nodes: [
|
|
m,
|
|
n
|
|
],
|
|
links: [
|
|
UNWIND rels AS rel
|
|
RETURN {
|
|
source: startNode(rel).id,
|
|
target: endNode(rel).id,
|
|
type: type(rel)
|
|
}
|
|
]
|
|
}
|
|
""", memberName=member_name)
|
|
|
|
record = result.single()
|
|
|
|
if not record:
|
|
return jsonify({"error": "No data found for the provided member name"}), 404
|
|
|
|
# Extract nodes and links from the returned record
|
|
nodes_data = []
|
|
links_data = []
|
|
|
|
nodes_record = record['nodes']
|
|
links_record = record['links']
|
|
|
|
# Process nodes
|
|
for node in nodes_record:
|
|
nodes_data.append({
|
|
"id": node.id,
|
|
"label": list(node.labels)[0] if node.labels else "",
|
|
"name": node.get("name", "")
|
|
})
|
|
|
|
# Process links
|
|
for link in links_record:
|
|
links_data.append({
|
|
"source": link['source'],
|
|
"target": link['target'],
|
|
"type": link['type']
|
|
})
|
|
|
|
data = {
|
|
"nodes": nodes_data,
|
|
"links": links_data
|
|
}
|
|
|
|
return jsonify(data)
|
|
|
|
except Exception as e:
|
|
neo4j_logger.error(f"Error querying Neo4j: {e}")
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
@bp.route('/get_member_names', methods=['GET'])
|
|
def get_member_names():
|
|
driver = get_driver()
|
|
|
|
try:
|
|
with driver.session() as session:
|
|
result = session.run("MATCH (p:Person) RETURN p.name AS name")
|
|
members = [record['name'] for record in result]
|
|
return jsonify(members)
|
|
|
|
except Exception as e:
|
|
neo4j_logger.error(f"Error fetching member names: {e}")
|
|
return jsonify({"error": str(e)}), 500
|