alphax/app/web/routes_admin.py
2026-05-13 23:50:02 +08:00

44 lines
2.0 KiB
Python

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"<meta charset=utf-8><h2>需要管理员权限</h2><p>{e.detail}</p><a href=/app>返回看板</a>", 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