from fastapi import APIRouter, Depends, HTTPException from auth import require_admin_dep from db import get_db from dialogue_store import StoreError, get_conversation, inventory, list_conversations, list_derived_for_conversation, list_messages from version import APP_VERSION, BUILD_DATE, MODULE_VERSIONS router = APIRouter(prefix="/api/admin", tags=["admin"]) @router.get("/health") def admin_health(session: dict = Depends(require_admin_dep)): with get_db() as conn: users = conn.execute("SELECT COUNT(*) AS n FROM profiles").fetchone()["n"] prompts = conn.execute("SELECT COUNT(*) AS n FROM ai_prompts").fetchone()["n"] features = conn.execute("SELECT COUNT(*) AS n FROM features").fetchone()["n"] dialogue = inventory() return { "ok": True, "service": "kansho", "version": APP_VERSION, "build_date": BUILD_DATE, "modules": MODULE_VERSIONS, "inventory": { "users": users, "prompts": prompts, "features": features, "dialogue": dialogue, }, "session": { "profile_id": session["profile_id"], "role": session["role"], }, } @router.get("/dialogue") def admin_dialogue(session: dict = Depends(require_admin_dep)): return { "instance": inventory(), "own_conversations": list_conversations(session["profile_id"]), "note": "Fremde Lived Experience ist kein Alltagspfad. Detailansicht nur für das eigene Profil.", } @router.get("/dialogue/conversations/{conversation_id}") def admin_conversation(conversation_id: str, session: dict = Depends(require_admin_dep)): try: conv = get_conversation(session["profile_id"], conversation_id) return { "conversation": conv, "original_messages": list_messages(session["profile_id"], conversation_id), "derived_records": list_derived_for_conversation(session["profile_id"], conversation_id), } except StoreError as exc: raise HTTPException(status_code=exc.status_code, detail={"code": exc.code, "message": exc.message}) from exc