54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
|
# endpoints/members.py
|
||
|
from flask import Blueprint, request, jsonify
|
||
|
from app import get_driver, neo4j_logger
|
||
|
|
||
|
bp = Blueprint('members', __name__)
|
||
|
|
||
|
@bp.route('/members', methods=['GET', 'POST'])
|
||
|
def members():
|
||
|
if request.method == 'GET':
|
||
|
return get_persons()
|
||
|
elif request.method == 'POST':
|
||
|
return create_person()
|
||
|
|
||
|
def get_persons():
|
||
|
driver = get_driver()
|
||
|
with driver.session() as session:
|
||
|
query = "MATCH (n:Person) RETURN n"
|
||
|
neo4j_logger.info(f"Executing query: {query}")
|
||
|
nodes = session.run(query)
|
||
|
|
||
|
# Convert the nodes to a list of dictionaries
|
||
|
persons_list = [
|
||
|
{
|
||
|
'id': record['n'].id,
|
||
|
'labels': list(record['n'].labels),
|
||
|
**{key: value for key, value in record['n'].items()}
|
||
|
}
|
||
|
for record in nodes
|
||
|
]
|
||
|
|
||
|
return jsonify({"persons": persons_list})
|
||
|
|
||
|
def create_person():
|
||
|
data = request.get_json()
|
||
|
if not data:
|
||
|
return jsonify({"error": "No data provided"}), 400
|
||
|
|
||
|
properties = ', '.join([f'{key}: "${key}"' for key in data])
|
||
|
query = f"CREATE (n:Person {{{properties}}}) RETURN n"
|
||
|
|
||
|
driver = get_driver()
|
||
|
with driver.session() as session:
|
||
|
neo4j_logger.info(f"Executing query: {query} with data: {data}")
|
||
|
result = session.run(query, **data)
|
||
|
|
||
|
# Convert the created node to a dictionary
|
||
|
person = {
|
||
|
'id': result.single()['n'].id,
|
||
|
'labels': list(result.single()['n'].labels),
|
||
|
**{key: value for key, value in result.single()['n'].items()}
|
||
|
}
|
||
|
|
||
|
return jsonify(person), 201
|