backend: Pydantic response_models für 5 GET-Endpoints hinzufügen

- health.py: HealthResponse
- eigenleben.py: EigenlebenOverviewResponse + SkillTextResponse
- chronik.py: ChronikResponse + ChronikItem
- wissen.py: WissenListResponse + WissenFileResponse
- reminders.py: ReminderListResponse + ReminderOut

py_compile bestanden, /docs zeigt neue Schemata.
Response-Payloads unverändert — nur Typisierung hinzugefügt.
This commit is contained in:
2026-07-15 19:33:39 +02:00
parent d0a967e765
commit 21ea7e1dd3
5 changed files with 101 additions and 9 deletions
+24 -2
View File
@@ -6,6 +6,8 @@ import os
import time
from pathlib import Path
from pydantic import BaseModel
from fastapi import APIRouter, HTTPException
router = APIRouter(prefix="/api")
@@ -30,7 +32,27 @@ def _title_of(p: Path) -> str:
return p.stem
@router.get("/wissen")
class VaultFile(BaseModel):
path: str
name: str
dir: str
title: str
mtime: float
neu: bool
class WissenListResponse(BaseModel):
available: bool
files: list[VaultFile]
class WissenFileResponse(BaseModel):
path: str
content: str
mtime: float
@router.get("/wissen", response_model=WissenListResponse)
def list_vault() -> dict:
"""Alle Markdown-Notizen des Vaults (relativer Pfad, Titel, Ordner, Alter)."""
if not _available():
@@ -54,7 +76,7 @@ def list_vault() -> dict:
return {"available": True, "files": files}
@router.get("/wissen/datei")
@router.get("/wissen/datei", response_model=WissenFileResponse)
def read_file(pfad: str) -> dict:
"""Inhalt einer Vault-Notiz — Traversal hart geblockt (resolve + is_relative_to)."""
if not _available():