首个可运行的版本
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
"""管理后台路由"""
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_db, get_admin_user
|
||||
from app.schemas.admin import (
|
||||
AdminLoginRequest, AdminLoginResponse, DashboardStats,
|
||||
UserBanRequest, SystemConfigUpdate,
|
||||
)
|
||||
from app.services.admin_service import AdminService
|
||||
from app.services.message_service import MessageService
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/login", response_model=AdminLoginResponse)
|
||||
async def admin_login(
|
||||
req: AdminLoginRequest,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""管理员登录(仅密码)"""
|
||||
service = AdminService(db)
|
||||
token = await service.login(req.password)
|
||||
if not token:
|
||||
raise HTTPException(status_code=401, detail="管理员密码错误")
|
||||
return AdminLoginResponse(access_token=token)
|
||||
|
||||
|
||||
@router.get("/dashboard", response_model=DashboardStats)
|
||||
async def admin_dashboard(
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""仪表盘统计数据"""
|
||||
service = AdminService(db)
|
||||
return await service.get_dashboard_stats()
|
||||
|
||||
|
||||
@router.get("/stats/{metric}")
|
||||
async def admin_stats(
|
||||
metric: str,
|
||||
days: int = Query(7, ge=1, le=90),
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""获取趋势数据 (online/messages/registrations)"""
|
||||
if metric not in ("online", "messages", "registrations"):
|
||||
raise HTTPException(status_code=400, detail="无效的指标类型")
|
||||
service = AdminService(db)
|
||||
return await service.get_trend_data(metric, days)
|
||||
|
||||
|
||||
@router.get("/users")
|
||||
async def admin_users(
|
||||
page: int = Query(1, ge=1),
|
||||
page_size: int = Query(20, ge=1, le=100),
|
||||
search: str | None = Query(None),
|
||||
status: str | None = Query(None),
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""用户管理列表"""
|
||||
service = AdminService(db)
|
||||
return await service.get_users_list(page, page_size, search, status)
|
||||
|
||||
|
||||
@router.put("/users/{user_id}/ban")
|
||||
async def admin_ban_user(
|
||||
user_id: str,
|
||||
req: UserBanRequest,
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""封禁/解封用户"""
|
||||
service = AdminService(db)
|
||||
try:
|
||||
await service.ban_user(user_id, req.is_banned, req.reason)
|
||||
return {"success": True}
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=404, detail=str(e))
|
||||
|
||||
|
||||
@router.delete("/users/{user_id}")
|
||||
async def admin_delete_user(
|
||||
user_id: str,
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""删除用户"""
|
||||
service = AdminService(db)
|
||||
await service.delete_user(user_id)
|
||||
return {"success": True}
|
||||
|
||||
|
||||
@router.get("/messages")
|
||||
async def admin_messages(
|
||||
user_id: str | None = Query(None),
|
||||
conversation_id: str | None = Query(None),
|
||||
keyword: str | None = Query(None),
|
||||
date_from: str | None = Query(None),
|
||||
date_to: str | None = Query(None),
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""搜索消息(管理审查)"""
|
||||
service = MessageService(db)
|
||||
return await service.search_messages(user_id, conversation_id, keyword, date_from, date_to)
|
||||
|
||||
|
||||
@router.get("/config")
|
||||
async def admin_get_config(
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""获取系统配置"""
|
||||
service = AdminService(db)
|
||||
return await service.get_all_configs()
|
||||
|
||||
|
||||
@router.put("/config")
|
||||
async def admin_update_config(
|
||||
req: SystemConfigUpdate,
|
||||
_=Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""更新系统配置"""
|
||||
service = AdminService(db)
|
||||
await service.update_configs(req.configs)
|
||||
return {"success": True}
|
||||
Reference in New Issue
Block a user