"""Раздел «Пользователи»: список с поиском и карточка игрока.""" from __future__ import annotations from fastapi import APIRouter, HTTPException, Request from fastapi.responses import HTMLResponse from common import __version__ from common.repositories import users_admin_repo router = APIRouter(prefix="/users", tags=["users"]) #: Сколько пользователей показывать на странице. PAGE_SIZE = 25 @router.get("", response_class=HTMLResponse) async def list_users(request: Request, q: str = "", page: int = 1) -> HTMLResponse: """Список пользователей: поиск по нику/username/имени/ID и пагинация.""" total = await users_admin_repo.count_users(q) pages = max((total + PAGE_SIZE - 1) // PAGE_SIZE, 1) page = min(max(page, 1), pages) return request.app.state.templates.TemplateResponse( request=request, name="users/list.html", context={ "version": __version__, "users": await users_admin_repo.list_users( q, limit=PAGE_SIZE, offset=(page - 1) * PAGE_SIZE, ), "q": q, "page": page, "pages": pages, "total": total, }, ) @router.get("/{user_id}", response_class=HTMLResponse) async def user_card(request: Request, user_id: int) -> HTMLResponse: """Карточка пользователя со сводкой и последними операциями по балансу.""" user = await users_admin_repo.get_user(user_id) if user is None: raise HTTPException(status_code=404, detail="Пользователь не найден") return request.app.state.templates.TemplateResponse( request=request, name="users/card.html", context={ "version": __version__, "user": user, "money": await users_admin_repo.money_history(user_id), }, )