57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
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
|