Files
opsxsql/backend/app/schemas/execution.py
T
logan 4c9427e546 sync: 同步 sql-platform-pro 最新代码 — 权限体系安全修复 v0.8.1
- P0: 实例访问控制全线接入权限组 (829测试)
- P1: permissions字段激活 + 操作级权限检查 (843测试)
- 前端: 删除数据权限页面, 权限组合并为唯一入口
- 新增: CodeMirror编辑器 + 查询模板 + 慢查询分析
- 新增: MongoDB管理页面 + Dashboard增强
- 修复: Pydantic V2迁移 + 前端TS错误修复
2026-05-23 14:41:06 +08:00

102 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""执行相关 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="提示消息")