From c1a7c441d24a600a41b110d2e6a90b4d2494f483682c7fa691e96b9a23d83693 Mon Sep 17 00:00:00 2001
From: Moses Rolston <moses.rolston@gmail.com>
Date: Wed, 12 Mar 2025 16:18:30 -0700
Subject: [PATCH] i don't remember making any changes

---
 api/app.py                       |  6 ++-
 api/endpoints/list_members.py    | 68 ++++++++++++++++++++++----------
 api/templates/render_member.html |  4 +-
 3 files changed, 54 insertions(+), 24 deletions(-)

diff --git a/api/app.py b/api/app.py
index d1ca721..b793e2e 100644
--- a/api/app.py
+++ b/api/app.py
@@ -1,6 +1,6 @@
 # api/__init__.py
 
-from flask import Flask, jsonify, request
+from flask import Flask, jsonify, request, render_template
 import logging
 from dotenv import load_dotenv
 from neo4j import GraphDatabase
@@ -54,5 +54,9 @@ def sitemap():
             })
     return jsonify(routes)
 
+@app.route('/render_member')
+def render_member():
+    return render_template('render_member.html')
+
 if __name__ == '__main__':
     app.run(debug=True)
diff --git a/api/endpoints/list_members.py b/api/endpoints/list_members.py
index cb76009..fe8568b 100644
--- a/api/endpoints/list_members.py
+++ b/api/endpoints/list_members.py
@@ -5,9 +5,10 @@ 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.form.get('member_name')
+    member_name = request.args.get('member_name')
 
     if not member_name:
         return jsonify({"error": "No member name provided"}), 400
@@ -18,31 +19,56 @@ def list_members():
         with driver.session() as session:
             result = session.run("""
                 MATCH (m:Person {name: $memberName})-[*]-(n)
-                RETURN m, n, collect(DISTINCT (m)-[r]->(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": [],
-                "links": []
+                "nodes": nodes_data,
+                "links": links_data
             }
 
-            for record in result:
-                node1 = record["m"]
-                nodes = [record["n"]]
-
-                # Add the first node
-                if {"id": node1.id, "label": node1.labels[0], "name": node1.get("name")} not in data["nodes"]:
-                    data["nodes"].append({"id": node1.id, "label": node1.labels[0], "name": node1.get("name")})
-
-                # Add other nodes and links
-                for node2 in nodes:
-                    if {"id": node2.id, "label": node2.labels[0], "name": node2.get("name")} not in data["nodes"]:
-                        data["nodes"].append({"id": node2.id, "label": node2.labels[0], "name": node2.get("name")})
-
-                    for rel in record[2]:
-                        if {"source": rel.start_node.id, "target": rel.end_node.id, "type": rel.type} not in data["links"]:
-                            data["links"].append({"source": rel.start_node.id, "target": rel.end_node.id, "type": rel.type})
-
             return jsonify(data)
 
     except Exception as e:
diff --git a/api/templates/render_member.html b/api/templates/render_member.html
index e125b5b..df448b4 100644
--- a/api/templates/render_member.html
+++ b/api/templates/render_member.html
@@ -25,7 +25,7 @@
 
     <script>
         // Fetch member names from Neo4j
-        fetch('/list_members/get_member_names')
+        fetch('/get_member_names')
             .then(response => response.json())
             .then(members => {
                 const select = document.getElementById('memberSelect');
@@ -42,7 +42,7 @@
             console.log("Member selected:", this.value); // Log the selected member name
 
             const selectedMember = this.value;
-            fetch(`/list_members/render_member?member_name=${encodeURIComponent(selectedMember)}`, {
+            fetch(`/list_members?member_name=${encodeURIComponent(selectedMember)}`, {
                 method: 'GET',
             })
             .then(response => response.json())