- P0: 实例访问控制全线接入权限组 (829测试) - P1: permissions字段激活 + 操作级权限检查 (843测试) - 前端: 删除数据权限页面, 权限组合并为唯一入口 - 新增: CodeMirror编辑器 + 查询模板 + 慢查询分析 - 新增: MongoDB管理页面 + Dashboard增强 - 修复: Pydantic V2迁移 + 前端TS错误修复
102 lines
4.0 KiB
Python
102 lines
4.0 KiB
Python
"""执行相关 Schema — 工单执行报告和数据验证模型。"""
|
||
|
||
from typing import List, Optional
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class ExecutionReportResponse(BaseModel):
|
||
"""工单执行报告响应模型。
|
||
|
||
包含工单执行后的完整结果信息,用于 API 返回。
|
||
|
||
Attributes:
|
||
status: 执行状态(success / failed / partial)
|
||
affected_rows: 影响行数(SQL)或成功命令数(Redis)或修改文档数(MongoDB)
|
||
duration_ms: 执行耗时(毫秒)
|
||
validation_passed: 验证是否通过
|
||
warnings: 警告信息列表
|
||
errors: 错误信息列表
|
||
raw_output: 原始执行输出
|
||
before_snapshot_summary: 执行前快照摘要
|
||
after_snapshot_summary: 执行后快照摘要
|
||
"""
|
||
|
||
status: str = Field(..., description="执行状态: success / failed / partial")
|
||
affected_rows: int = Field(0, ge=0, description="影响行数")
|
||
duration_ms: int = Field(0, ge=0, description="执行耗时(毫秒)")
|
||
validation_passed: bool = Field(True, description="验证是否通过")
|
||
warnings: List[str] = Field(default_factory=list, description="警告信息")
|
||
errors: List[str] = Field(default_factory=list, description="错误信息")
|
||
raw_output: Optional[str] = Field(None, description="原始执行输出")
|
||
before_snapshot_summary: Optional[str] = Field(None, description="执行前快照摘要")
|
||
after_snapshot_summary: Optional[str] = Field(None, description="执行后快照摘要")
|
||
|
||
class Config:
|
||
json_schema_extra = {
|
||
"example": {
|
||
"status": "success",
|
||
"affected_rows": 3,
|
||
"duration_ms": 145,
|
||
"validation_passed": True,
|
||
"warnings": [],
|
||
"errors": [],
|
||
"raw_output": "[UPDATE users SET status='active' WHERE ...] 影响 3 行",
|
||
"before_snapshot_summary": "UPDATE 表 `users`: 将有 3 行被更新 (WHERE: status='inactive')",
|
||
"after_snapshot_summary": "表 `users`: 当前 150 行",
|
||
}
|
||
}
|
||
|
||
|
||
class RedisCommandRequest(BaseModel):
|
||
"""Redis 命令请求模型。"""
|
||
|
||
command: str = Field(..., min_length=1, description="Redis 命令")
|
||
db: int = Field(0, ge=0, le=15, description="数据库编号")
|
||
|
||
|
||
class RedisTicketContent(BaseModel):
|
||
"""Redis 工单内容模型(JSON 格式)。"""
|
||
|
||
commands: List[RedisCommandRequest] = Field(
|
||
..., min_length=1, description="命令列表"
|
||
)
|
||
|
||
|
||
class MongoOperationRequest(BaseModel):
|
||
"""MongoDB 操作请求模型。
|
||
|
||
支持的操作类型:
|
||
- insertOne / insertMany: 插入文档
|
||
- updateOne / updateMany: 更新文档
|
||
- deleteOne / deleteMany: 删除文档
|
||
- replaceOne: 替换文档
|
||
"""
|
||
|
||
collection: str = Field(..., min_length=1, description="集合名称")
|
||
operation: str = Field(
|
||
...,
|
||
pattern=r"^(insertOne|insertMany|updateOne|updateMany|deleteOne|deleteMany|replaceOne)$",
|
||
description="操作类型",
|
||
)
|
||
filter: Optional[dict] = Field(None, description="查询条件")
|
||
update: Optional[dict] = Field(None, description="更新内容")
|
||
document: Optional[dict] = Field(None, description="插入/替换的文档")
|
||
documents: Optional[List[dict]] = Field(None, description="批量插入的文档列表")
|
||
options: Optional[dict] = Field(None, description="额外选项")
|
||
|
||
|
||
class TicketExecuteResponse(BaseModel):
|
||
"""工单执行响应模型(API 返回)。"""
|
||
|
||
id: int = Field(..., description="工单ID")
|
||
title: str = Field(..., description="工单标题")
|
||
status: str = Field(..., description="工单状态")
|
||
db_type: str = Field(..., description="数据库类型")
|
||
execute_result: Optional[str] = Field(None, description="执行结果摘要")
|
||
execute_time: Optional[str] = Field(None, description="执行时间")
|
||
execution_report: Optional[ExecutionReportResponse] = Field(
|
||
None, description="详细执行报告"
|
||
)
|
||
message: Optional[str] = Field(None, description="提示消息")
|