"""执行相关 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="提示消息")