feat: adjust graph_json

This commit is contained in:
julius 2025-03-11 12:34:45 +01:00
parent 6d2bf057a5
commit 95e66e5d73
Signed by: julius
GPG Key ID: C80A63E6A5FD7092

View File

@ -27,14 +27,13 @@ def sociogram_json():
nodes = [] nodes = []
necessary_nodes = set() necessary_nodes = set()
edges = [] edges = []
players = {}
with Session(engine) as session: with Session(engine) as session:
for p in session.exec(select(P)).fetchall(): 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 = ( subquery = (
select(C.user, func.max(C.time).label("latest")) select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery()
.where(C.time > datetime(2025, 2, 1, 10))
.group_by(C.user)
.subquery()
) )
statement2 = select(C).join( statement2 = select(C).join(
subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest) subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest)
@ -42,13 +41,13 @@ def sociogram_json():
for c in session.exec(statement2): for c in session.exec(statement2):
# G.add_node(c.user) # G.add_node(c.user)
necessary_nodes.add(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) # G.add_edge(c.user, p)
# p_id = session.exec(select(P.id).where(P.name == p)).one() # p_id = session.exec(select(P.id).where(P.name == p)).one()
necessary_nodes.add(p) necessary_nodes.add(p)
edges.append({"from": c.user, "to": p, "relation": "likes"}) edges.append({"from": players[c.user], "to": p, "relation": "likes"})
for p in c.hate: for p in [players[p_id] for p_id in c.hate]:
edges.append({"from": c.user, "to": p, "relation": "dislikes"}) edges.append({"from": players[c.user], "to": p, "relation": "dislikes"})
# nodes = [n for n in nodes if n["name"] in necessary_nodes] # nodes = [n for n in nodes if n["name"] in necessary_nodes]
return JSONResponse({"nodes": nodes, "edges": edges}) return JSONResponse({"nodes": nodes, "edges": edges})
@ -56,24 +55,25 @@ def sociogram_json():
def graph_json(): def graph_json():
nodes = [] nodes = []
edges = [] edges = []
players = {}
with Session(engine) as session: with Session(engine) as session:
for p in session.exec(select(P)).fetchall(): 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 = ( subquery = (
select(C.user, func.max(C.time).label("latest")) select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery()
.where(C.time > datetime(2025, 2, 1, 10))
.group_by(C.user)
.subquery()
) )
statement2 = select(C).join( statement2 = select(C).join(
subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest) subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest)
) )
for c in session.exec(statement2): 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( edges.append(
{ {
"id": f"{c.user}->{p}", "id": f"{user}->{p}",
"source": c.user, "source": user,
"target": p, "target": p,
"size": max(1.0 - 0.1 * i, 0.3), "size": max(1.0 - 0.1 * i, 0.3),
"data": { "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( edges.append(
{ {
"id": f"{c.user}-x>{p}", "id": f"{user}-x>{p}",
"source": c.user, "source": user,
"target": p, "target": p,
"size": 0.3, "size": 0.3,
"data": {"relation": 0, "origSize": 0.3, "origFill": "#ff7c7c"}, "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(): for p in session.exec(select(P)).fetchall():
G.add_node(p.name) G.add_node(p.name)
subquery = ( subquery = (
select(C.user, func.max(C.time).label("latest")) select(C.user, func.max(C.time).label("latest")).group_by(C.user).subquery()
.where(C.time > datetime(2025, 2, 1, 10))
.group_by(C.user)
.subquery()
) )
statement2 = ( statement2 = (
select(C) select(C)