""" 管理员仪表盘 API """ from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from sqlalchemy import func from ...database import get_db, SessionLocal from ...models import ( User, AIModel, Order, TokenUsageLog, OperationLog, AuditLog ) from ...auth import get_current_admin from ...middleware.log_service import LogService from datetime import datetime, date router = APIRouter() @router.get("/stats") async def get_dashboard_stats( admin_user=Depends(get_current_admin), db: Session = Depends(get_db), ): """获取管理员仪表盘统计数据""" today = date.today() active_users = db.query(func.count(User.id)).filter( User.status == "active" ).scalar() or 0 enabled_models = db.query(func.count(AIModel.id)).filter( AIModel.is_enabled == True ).scalar() or 0 today_orders = db.query(func.count(Order.id)).filter( func.date(Order.created_at) == today ).scalar() or 0 today_tokens = db.query(func.sum(TokenUsageLog.total_tokens)).filter( func.date(TokenUsageLog.created_at) == today ).scalar() or 0 total_tokens = db.query(func.sum(TokenUsageLog.total_tokens)).scalar() or 0 return { "active_users": active_users, "enabled_models": enabled_models, "today_orders": today_orders, "today_tokens": int(today_tokens), "total_tokens": int(total_tokens), } @router.get("/recent-logs") async def get_recent_logs( admin_user=Depends(get_current_admin), db: Session = Depends(get_db), ): """获取最近10条操作日志""" logs = db.query(OperationLog).order_by( OperationLog.created_at.desc() ).limit(10).all() return [ { "id": log.id, "user_id": log.user_id, "username": log.username, "action": log.action, "target": log.target, "target_id": log.target_id, "detail": log.detail, "ip": log.ip, "created_at": log.created_at.isoformat() if log.created_at else None, } for log in logs ] @router.get("/recent-audit") async def get_recent_audit( admin_user=Depends(get_current_admin), db: Session = Depends(get_db), ): """获取最近10条审计日志""" logs = db.query(AuditLog).order_by( AuditLog.created_at.desc() ).limit(10).all() return [ { "id": log.id, "admin_id": log.admin_id, "admin_name": log.admin_name, "action": log.action, "target_type": log.target_type, "target_id": log.target_id, "detail": log.detail, "created_at": log.created_at.isoformat() if log.created_at else None, } for log in logs ]