Files
FastapiAdmin/backend/app/api/v1/module_monitor/online/controller.py
T
zhangtao d34d4a4c50 chore: 完成多批次代码优化与重构
- 重构工作流模块目录结构,迁移代码文件
- 修复类型断言空值安全问题,添加 ! 操作符
- 优化样式类名,替换 flex-cc 为标准 flex 工具类
- 更新路由标签简化文案,移除冗余注释
- 调整 ruff 配置,放宽行长度限制
- 更新 README 与多语言文案,优化项目描述
- 修复表单、图表组件的类型与样式问题
- 简化搜索表单、数据卡片的布局代码
2026-06-20 05:31:46 +08:00

96 lines
3.0 KiB
Python

from typing import Annotated
from fastapi import APIRouter, Body, Depends
from fastapi.responses import JSONResponse
from redis.asyncio.client import Redis
from app.common.request import PaginationService
from app.common.response import ResponseSchema, SuccessResponse
from app.core.base_params import PaginationQueryParam
from app.core.dependencies import AuthPermission, redis_getter
from app.core.router_class import OperationLogRoute
from .schema import OnlineOutSchema, OnlineQueryParam
from .service import OnlineService
OnlineRouter = APIRouter(route_class=OperationLogRoute, prefix="/online", tags=["在线用户"])
@OnlineRouter.get(
"/list",
dependencies=[Depends(AuthPermission(["module_monitor:online:query"]))],
summary="获取在线用户列表",
response_model=ResponseSchema[list[OnlineOutSchema]],
)
async def get_online_list_controller(
redis: Annotated[Redis, Depends(redis_getter)],
paging_query: Annotated[PaginationQueryParam, Depends()],
search: Annotated[OnlineQueryParam, Depends()],
) -> JSONResponse:
"""
获取在线用户列表
参数:
- redis (Redis): Redis异步客户端实例。
- paging_query (PaginationQueryParam): 分页查询参数模型。
- search (OnlineQueryParam): 查询参数模型。
返回:
- JSONResponse: 包含在线用户列表的JSON响应。
"""
result_dict_list = await OnlineService.get_online_list_service(redis=redis, search=search)
# 在线用户来自 Redis,无法在数据库层 OFFSET/LIMIT
result_dict = await PaginationService.paginate(
data_list=result_dict_list,
page_no=paging_query.page_no,
page_size=paging_query.page_size,
)
return SuccessResponse(data=result_dict, msg="获取成功")
@OnlineRouter.delete(
"/delete",
dependencies=[Depends(AuthPermission(["module_monitor:online:delete"]))],
summary="强制下线",
response_model=ResponseSchema[None],
)
async def delete_online_controller(
session_id: Annotated[str, Body(description="会话编号")],
redis: Annotated[Redis, Depends(redis_getter)],
) -> JSONResponse:
"""
强制下线指定在线用户
参数:
- session_id (str): 在线用户会话ID。
- redis (Redis): Redis异步客户端实例。
返回:
- JSONResponse: 包含操作结果的JSON响应。
"""
await OnlineService.delete_online_service(redis=redis, session_id=session_id)
return SuccessResponse(msg="强制下线成功")
@OnlineRouter.delete(
"/clear",
dependencies=[Depends(AuthPermission(["module_monitor:online:delete"]))],
summary="清除所有在线用户",
response_model=ResponseSchema[None],
)
async def clear_online_controller(
redis: Annotated[Redis, Depends(redis_getter)],
) -> JSONResponse:
"""
清除所有在线用户
参数:
- redis (Redis): Redis异步客户端实例。
返回:
- JSONResponse: 包含操作结果的JSON响应。
"""
await OnlineService.clear_online_service(redis=redis)
return SuccessResponse(msg="清除所有在线用户成功")