127 lines
4.8 KiB
Python
127 lines
4.8 KiB
Python
"""
|
|
操作日志相关的Pydantic Schema
|
|
"""
|
|
from typing import Optional, List, Dict, Any
|
|
from datetime import datetime
|
|
from pydantic import BaseModel, Field
|
|
from enum import Enum
|
|
|
|
|
|
class OperationModuleEnum(str, Enum):
|
|
"""操作模块枚举"""
|
|
AUTH = "auth" # 认证模块
|
|
ASSET = "asset" # 资产模块
|
|
DEVICE_TYPE = "device_type" # 设备类型模块
|
|
ORGANIZATION = "organization" # 机构模块
|
|
BRAND_SUPPLIER = "brand_supplier" # 品牌供应商模块
|
|
ALLOCATION = "allocation" # 调拨模块
|
|
MAINTENANCE = "maintenance" # 维修模块
|
|
SYSTEM_CONFIG = "system_config" # 系统配置模块
|
|
USER = "user" # 用户模块
|
|
STATISTICS = "statistics" # 统计模块
|
|
|
|
|
|
class OperationTypeEnum(str, Enum):
|
|
"""操作类型枚举"""
|
|
CREATE = "create" # 创建
|
|
UPDATE = "update" # 更新
|
|
DELETE = "delete" # 删除
|
|
QUERY = "query" # 查询
|
|
EXPORT = "export" # 导出
|
|
IMPORT = "import" # 导入
|
|
LOGIN = "login" # 登录
|
|
LOGOUT = "logout" # 登出
|
|
APPROVE = "approve" # 审批
|
|
REJECT = "reject" # 拒绝
|
|
ASSIGN = "assign" # 分配
|
|
TRANSFER = "transfer" # 调拨
|
|
SCRAP = "scrap" # 报废
|
|
|
|
|
|
class OperationResultEnum(str, Enum):
|
|
"""操作结果枚举"""
|
|
SUCCESS = "success"
|
|
FAILED = "failed"
|
|
|
|
|
|
class OperationLogBase(BaseModel):
|
|
"""操作日志基础Schema"""
|
|
operator_id: int = Field(..., description="操作人ID")
|
|
operator_name: str = Field(..., min_length=1, max_length=100, description="操作人姓名")
|
|
operator_ip: Optional[str] = Field(None, max_length=50, description="操作人IP")
|
|
module: OperationModuleEnum = Field(..., description="模块名称")
|
|
operation_type: OperationTypeEnum = Field(..., description="操作类型")
|
|
method: str = Field(..., min_length=1, max_length=10, description="请求方法")
|
|
url: str = Field(..., min_length=1, max_length=500, description="请求URL")
|
|
params: Optional[str] = Field(None, description="请求参数")
|
|
result: OperationResultEnum = Field(default=OperationResultEnum.SUCCESS, description="操作结果")
|
|
error_msg: Optional[str] = Field(None, description="错误信息")
|
|
duration: Optional[int] = Field(None, ge=0, description="执行时长(毫秒)")
|
|
user_agent: Optional[str] = Field(None, max_length=500, description="用户代理")
|
|
extra_data: Optional[Dict[str, Any]] = Field(None, description="额外数据")
|
|
|
|
|
|
class OperationLogCreate(OperationLogBase):
|
|
"""创建操作日志Schema"""
|
|
pass
|
|
|
|
|
|
class OperationLogInDB(BaseModel):
|
|
"""数据库中的操作日志Schema"""
|
|
id: int
|
|
operator_id: int
|
|
operator_name: str
|
|
operator_ip: Optional[str]
|
|
module: str
|
|
operation_type: str
|
|
method: str
|
|
url: str
|
|
params: Optional[str]
|
|
result: str
|
|
error_msg: Optional[str]
|
|
duration: Optional[int]
|
|
user_agent: Optional[str]
|
|
extra_data: Optional[Dict[str, Any]]
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class OperationLogResponse(OperationLogInDB):
|
|
"""操作日志响应Schema"""
|
|
pass
|
|
|
|
|
|
class OperationLogQueryParams(BaseModel):
|
|
"""操作日志查询参数"""
|
|
operator_id: Optional[int] = Field(None, description="操作人ID")
|
|
operator_name: Optional[str] = Field(None, description="操作人姓名")
|
|
module: Optional[OperationModuleEnum] = Field(None, description="模块名称")
|
|
operation_type: Optional[OperationTypeEnum] = Field(None, description="操作类型")
|
|
result: Optional[OperationResultEnum] = Field(None, description="操作结果")
|
|
start_time: Optional[datetime] = Field(None, description="开始时间")
|
|
end_time: Optional[datetime] = Field(None, description="结束时间")
|
|
keyword: Optional[str] = Field(None, description="关键词")
|
|
page: int = Field(default=1, ge=1, description="页码")
|
|
page_size: int = Field(default=20, ge=1, le=100, description="每页数量")
|
|
|
|
|
|
class OperationLogStatistics(BaseModel):
|
|
"""操作日志统计Schema"""
|
|
total_count: int = Field(..., description="总操作次数")
|
|
success_count: int = Field(..., description="成功次数")
|
|
failed_count: int = Field(..., description="失败次数")
|
|
today_count: int = Field(..., description="今日操作次数")
|
|
module_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="模块分布")
|
|
operation_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="操作类型分布")
|
|
|
|
|
|
class OperationLogExport(BaseModel):
|
|
"""操作日志导出Schema"""
|
|
start_time: Optional[datetime] = Field(None, description="开始时间")
|
|
end_time: Optional[datetime] = Field(None, description="结束时间")
|
|
operator_id: Optional[int] = Field(None, description="操作人ID")
|
|
module: Optional[str] = Field(None, description="模块名称")
|
|
operation_type: Optional[str] = Field(None, description="操作类型")
|