from fastapi import APIRouter, Cookie, HTTPException, Request from fastapi.responses import HTMLResponse from app.db import auth_db from app.web.shared import login_redirect, require_admin def build_router(templates): router = APIRouter() @router.get("/admin.html", response_class=HTMLResponse) async def admin_page(request: Request, altcoin_session: str = Cookie(default="")): if not auth_db.get_user_by_session_token(altcoin_session): return login_redirect() try: require_admin(altcoin_session) except HTTPException as e: return HTMLResponse(content=f"
{e.detail}
返回看板", status_code=e.status_code) return templates.TemplateResponse(request=request, name="admin.html", context={"show_nav": True}) @router.get("/api/admin/check") async def api_admin_check(altcoin_session: str = Cookie(default="")): try: user = require_admin(altcoin_session) return {"is_admin": True, "email": user.get("email", "")} except HTTPException: return {"is_admin": False} @router.get("/api/admin/stats") async def api_admin_stats(altcoin_session: str = Cookie(default="")): require_admin(altcoin_session) return auth_db.get_admin_stats() @router.get("/api/admin/users") async def api_admin_users(search: str = "", offset: int = 0, limit: int = 50, tab: str = "all", altcoin_session: str = Cookie(default="")): require_admin(altcoin_session) return auth_db.get_admin_users(search=search, offset=offset, limit=limit, tab=tab) @router.get("/api/admin/orders") async def api_admin_orders(search: str = "", offset: int = 0, limit: int = 50, status: str = "all", altcoin_session: str = Cookie(default="")): require_admin(altcoin_session) return auth_db.get_admin_orders(search=search, offset=offset, limit=limit, status=status) return router