From 309462dfa9b909d86ea9862df6b4e7776920cd0c Mon Sep 17 00:00:00 2001 From: Lars Date: Wed, 3 Sep 2025 07:57:51 +0200 Subject: [PATCH] =?UTF-8?q?app/core/edges.py=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/edges.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/core/edges.py diff --git a/app/core/edges.py b/app/core/edges.py new file mode 100644 index 0000000..0cc0544 --- /dev/null +++ b/app/core/edges.py @@ -0,0 +1,45 @@ +from __future__ import annotations +from typing import List, Dict + +def deriv_edges_for_note(note_meta: Dict, chunk_payloads: List[Dict]) -> List[Dict]: + edges: List[Dict] = [] + + # Chunk → Note (belongs_to) + prev/next + for idx, ch in enumerate(chunk_payloads): + edges.append({ + "src_id": ch["id"], "dst_id": note_meta["id"], + "edge_type": "belongs_to", "scope": "chunk" + }) + prev_id = ch.get("neighbors",{}).get("prev") + next_id = ch.get("neighbors",{}).get("next") + if prev_id: + edges.append({"src_id": ch["id"], "dst_id": prev_id, "edge_type": "next", "scope": "chunk"}) + edges.append({"src_id": prev_id, "dst_id": ch["id"], "edge_type": "prev", "scope": "chunk"}) + if next_id: + edges.append({"src_id": ch["id"], "dst_id": next_id, "edge_type": "next", "scope": "chunk"}) + edges.append({"src_id": next_id, "dst_id": ch["id"], "edge_type": "prev", "scope": "chunk"}) + + # references aus wikilinks (Chunk-Scope) + for ref in ch.get("references", []): + tid = ref.get("target_id") + if not tid: continue + edges.append({"src_id": ch["id"], "dst_id": tid, "edge_type": "references", "scope": "chunk"}) + edges.append({"src_id": tid, "dst_id": ch["id"], "edge_type": "backlink", "scope": "chunk"}) + + # depends_on / assigned_to (Note-Scope, aus Frontmatter) + for dep in note_meta.get("depends_on", []) or []: + edges.append({"src_id": note_meta["id"], "dst_id": dep, "edge_type": "depends_on", "scope": "note"}) + for ass in note_meta.get("assigned_to", []) or []: + edges.append({"src_id": note_meta["id"], "dst_id": ass, "edge_type": "assigned_to", "scope": "note"}) + + # Note-Level references (optional: falls du im Note-Payload `references` sammelst) + for tid in note_meta.get("references", []) or []: + edges.append({"src_id": note_meta["id"], "dst_id": tid, "edge_type": "references", "scope": "note"}) + edges.append({"src_id": tid, "dst_id": note_meta["id"], "edge_type": "backlink", "scope": "note"}) + + # Dedupe + uniq = {} + for e in edges: + k = (e["src_id"], e["edge_type"], e["dst_id"], e.get("scope","note")) + uniq[k] = e + return list(uniq.values())