From 95e66e5d73809398f28687532f86952da3cb5b79 Mon Sep 17 00:00:00 2001 From: julius Date: Tue, 11 Mar 2025 12:34:45 +0100 Subject: [PATCH] feat: adjust graph_json --- analysis.py | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/analysis.py b/analysis.py index c624759..82fb3c9 100644 --- a/analysis.py +++ b/analysis.py @@ -27,14 +27,13 @@ def sociogram_json(): nodes = [] necessary_nodes = set() edges = [] + players = {} with Session(engine) as session: for p in session.exec(select(P)).fetchall(): - nodes.append({"id": p.name, "label": p.name}) + nodes.append({"id": p.display_name, "label": p.display_name}) + players[p.id] = p.display_name subquery = ( - select(C.user, func.max(C.time).label("latest")) - .where(C.time > datetime(2025, 2, 1, 10)) - .group_by(C.user) - .subquery() + select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery() ) statement2 = select(C).join( subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest) @@ -42,13 +41,13 @@ def sociogram_json(): for c in session.exec(statement2): # G.add_node(c.user) necessary_nodes.add(c.user) - for p in c.love: + for p in [players[p_id] for p_id in c.love]: # G.add_edge(c.user, p) # p_id = session.exec(select(P.id).where(P.name == p)).one() necessary_nodes.add(p) - edges.append({"from": c.user, "to": p, "relation": "likes"}) - for p in c.hate: - edges.append({"from": c.user, "to": p, "relation": "dislikes"}) + edges.append({"from": players[c.user], "to": p, "relation": "likes"}) + for p in [players[p_id] for p_id in c.hate]: + edges.append({"from": players[c.user], "to": p, "relation": "dislikes"}) # nodes = [n for n in nodes if n["name"] in necessary_nodes] return JSONResponse({"nodes": nodes, "edges": edges}) @@ -56,24 +55,25 @@ def sociogram_json(): def graph_json(): nodes = [] edges = [] + players = {} with Session(engine) as session: for p in session.exec(select(P)).fetchall(): - nodes.append({"id": p.name, "label": p.name}) + players[p.id] = p.display_name + nodes.append({"id": p.display_name, "label": p.display_name}) subquery = ( - select(C.user, func.max(C.time).label("latest")) - .where(C.time > datetime(2025, 2, 1, 10)) - .group_by(C.user) - .subquery() + select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery() ) statement2 = select(C).join( subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest) ) for c in session.exec(statement2): - for i, p in enumerate(c.love): + user = players[c.user] + for i, p_id in enumerate(c.love): + p = players[p_id] edges.append( { - "id": f"{c.user}->{p}", - "source": c.user, + "id": f"{user}->{p}", + "source": user, "target": p, "size": max(1.0 - 0.1 * i, 0.3), "data": { @@ -83,11 +83,12 @@ def graph_json(): }, } ) - for p in c.hate: + for p_id in c.hate: + p = players[p_id] edges.append( { - "id": f"{c.user}-x>{p}", - "source": c.user, + "id": f"{user}-x>{p}", + "source": user, "target": p, "size": 0.3, "data": {"relation": 0, "origSize": 0.3, "origFill": "#ff7c7c"}, @@ -110,10 +111,7 @@ def sociogram_data(show: int | None = 2): for p in session.exec(select(P)).fetchall(): G.add_node(p.name) subquery = ( - select(C.user, func.max(C.time).label("latest")) - .where(C.time > datetime(2025, 2, 1, 10)) - .group_by(C.user) - .subquery() + select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery() ) statement2 = ( select(C)