"""定时任务 Schema — 基于 SQL 的自动化任务。""" from typing import Optional, List from pydantic import BaseModel, Field from datetime import datetime from enum import Enum class TaskSqlType(str, Enum): insert = "insert" update = "update" delete = "delete" class ScheduledTaskCreate(BaseModel): name: str = Field(..., min_length=1, max_length=100) description: Optional[str] = None task_sql_type: TaskSqlType instance_id: int target_db: Optional[str] = None target_table: Optional[str] = None sql_content: str = Field(..., min_length=1) cron_expression: str = Field(..., min_length=1) is_enabled: bool = True class ScheduledTaskUpdate(BaseModel): name: Optional[str] = Field(None, min_length=1, max_length=100) description: Optional[str] = None task_sql_type: Optional[TaskSqlType] = None instance_id: Optional[int] = None target_db: Optional[str] = None target_table: Optional[str] = None sql_content: Optional[str] = Field(None, min_length=1) cron_expression: Optional[str] = Field(None, min_length=1) is_enabled: Optional[bool] = None class ScheduledTaskResponse(BaseModel): id: int name: str description: Optional[str] task_sql_type: str instance_id: int instance_name: Optional[str] = None instance_db_type: Optional[str] = None target_db: Optional[str] target_table: Optional[str] sql_content: str cron_expression: str is_enabled: bool last_run_at: Optional[datetime] last_run_status: Optional[str] last_run_message: Optional[str] next_run_at: Optional[datetime] run_count: int created_by: Optional[int] created_at: datetime class Config: from_attributes = True class ScheduledTaskLogResponse(BaseModel): id: int task_id: int status: str sql_content: Optional[str] affected_rows: int duration_ms: Optional[int] error_message: Optional[str] started_at: datetime finished_at: Optional[datetime] class Config: from_attributes = True class TaskRunResponse(BaseModel): success: bool message: str affected_rows: int = 0 duration_ms: int = 0