Fix API compatibility and add user/role/permission and asset import/export
This commit is contained in:
126
backend/app/schemas/operation_log.py
Normal file
126
backend/app/schemas/operation_log.py
Normal file
@@ -0,0 +1,126 @@
|
||||
"""
|
||||
操作日志相关的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="操作类型")
|
||||
Reference in New Issue
Block a user