feat(admin): Knöpfe "Statistik zurücksetzen" + "Erinnerungen löschen" pro Nutzer
DELETE /api/admin/users/{id}/stats (usage/web_search_usage/cost_usage) und
.../memories (alle Erinnerungen) — require_admin, audit-geloggt; Konto, Verlauf
und (jeweils) die andere Datenart bleiben. Store-Methoden delete_user_stats/
delete_user_memories + zwei UI-Buttons je Nutzerkarte.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
f83c04f3d6
commit
8fb5e42e1b
3 changed files with 61 additions and 0 deletions
|
|
@ -143,6 +143,29 @@ async def delete_user_history(user_id: str, request: Request):
|
|||
return {"user_id": user_id, "deleted_messages": deleted}
|
||||
|
||||
|
||||
@router.delete("/admin/users/{user_id}/stats", dependencies=[Depends(require_admin)])
|
||||
async def delete_user_stats(user_id: str, request: Request):
|
||||
"""Setzt die Statistik-/Nutzungsdaten (Anfragen, Web-Suchen, Kosten) eines
|
||||
Nutzers zurueck; Konto, Verlauf und Erinnerungen bleiben."""
|
||||
store = get_store()
|
||||
if store.get_user(user_id) is None:
|
||||
raise HTTPException(status_code=404, detail=f"Nutzer {user_id!r} nicht gefunden.")
|
||||
deleted = store.delete_user_stats(user_id)
|
||||
log_admin_action(request, "user_stats_reset", user_id=user_id)
|
||||
return {"user_id": user_id, "deleted_rows": deleted}
|
||||
|
||||
|
||||
@router.delete("/admin/users/{user_id}/memories", dependencies=[Depends(require_admin)])
|
||||
async def delete_user_memories(user_id: str, request: Request):
|
||||
"""Loescht alle Erinnerungen eines Nutzers; Konto, Verlauf und Statistik bleiben."""
|
||||
store = get_store()
|
||||
if store.get_user(user_id) is None:
|
||||
raise HTTPException(status_code=404, detail=f"Nutzer {user_id!r} nicht gefunden.")
|
||||
deleted = store.delete_user_memories(user_id)
|
||||
log_admin_action(request, "user_memories_deleted", user_id=user_id)
|
||||
return {"user_id": user_id, "deleted_memories": deleted}
|
||||
|
||||
|
||||
@router.post("/admin/users/{user_id}/token", response_model=UserCreated, dependencies=[Depends(require_admin)])
|
||||
async def reset_token(user_id: str):
|
||||
"""Stellt einen neuen Bearer-Token aus; der alte wird sofort ungueltig.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue