Add user stats and activity tracking
This commit is contained in:
@@ -7,6 +7,11 @@ from ..db import (
|
||||
set_last_login,
|
||||
get_user_by_username,
|
||||
set_user_password,
|
||||
get_user_activity,
|
||||
get_user_activity_summary,
|
||||
get_user_request_stats,
|
||||
get_global_request_leader,
|
||||
get_global_request_total,
|
||||
)
|
||||
from ..runtime import get_runtime_settings
|
||||
from ..clients.jellyfin import JellyfinClient
|
||||
@@ -17,6 +22,10 @@ from ..auth import get_current_user
|
||||
router = APIRouter(prefix="/auth", tags=["auth"])
|
||||
|
||||
|
||||
def _normalize_username(value: str) -> str:
|
||||
return value.strip().lower()
|
||||
|
||||
|
||||
@router.post("/login")
|
||||
async def login(form_data: OAuth2PasswordRequestForm = Depends()) -> dict:
|
||||
user = verify_user_password(form_data.username, form_data.password)
|
||||
@@ -92,6 +101,31 @@ async def me(current_user: dict = Depends(get_current_user)) -> dict:
|
||||
return current_user
|
||||
|
||||
|
||||
@router.get("/profile")
|
||||
async def profile(current_user: dict = Depends(get_current_user)) -> dict:
|
||||
username = current_user.get("username") or ""
|
||||
username_norm = _normalize_username(username) if username else ""
|
||||
stats = get_user_request_stats(username_norm)
|
||||
global_total = get_global_request_total()
|
||||
leader = get_global_request_leader()
|
||||
share = (stats.get("total", 0) / global_total) if global_total else 0
|
||||
activity_summary = get_user_activity_summary(username) if username else {}
|
||||
activity_recent = get_user_activity(username, limit=5) if username else []
|
||||
return {
|
||||
"user": current_user,
|
||||
"stats": {
|
||||
**stats,
|
||||
"share": share,
|
||||
"global_total": global_total,
|
||||
"most_active_user": leader,
|
||||
},
|
||||
"activity": {
|
||||
**activity_summary,
|
||||
"recent": activity_recent,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@router.post("/password")
|
||||
async def change_password(payload: dict, current_user: dict = Depends(get_current_user)) -> dict:
|
||||
if current_user.get("auth_provider") != "local":
|
||||
|
||||
Reference in New Issue
Block a user