diff --git a/app/core/note_payload.py b/app/core/note_payload.py new file mode 100644 index 0000000..7e481a4 --- /dev/null +++ b/app/core/note_payload.py @@ -0,0 +1,39 @@ +from __future__ import annotations +import os +import hashlib +from typing import Dict +from .parser import ParsedNote +from .parser import extract_wikilinks + +def sha256_text(text: str) -> str: + h = hashlib.sha256() + h.update(text.encode("utf-8")) + return h.hexdigest() + +def make_note_payload(parsed: ParsedNote, vault_root: str) -> Dict: + fm = parsed.frontmatter + body = parsed.body + rel_path = os.path.relpath(parsed.path, vault_root) if vault_root else parsed.path + + payload = { + "note_id": fm.get("id"), + "title": fm.get("title"), + "type": fm.get("type"), + "status": fm.get("status"), + "created": fm.get("created"), + "updated": fm.get("updated"), + "tags": fm.get("tags") or [], + "priority": fm.get("priority"), + "effort_min": fm.get("effort_min"), + "due": fm.get("due"), + "people": fm.get("people") or [], + "aliases": fm.get("aliases") or [], + "depends_on": fm.get("depends_on") or [], + "assigned_to": fm.get("assigned_to") or [], + "references": list(sorted(set(extract_wikilinks(body)))), + "lang": fm.get("lang") or None, + "path": rel_path.replace("\\", "/"), + "hash_fulltext": sha256_text(body.strip()), + } + # Entferne None-Werte für saubere Payloads + return {k: v for k, v in payload.items() if v not in (None, [])}