from datetime import datetime from typing import Literal, Optional from pydantic import BaseModel, ConfigDict, Field class RestoreTargetsResponse(BaseModel): """列出某个 run 可恢复的目标元信息。""" run_id: int job_type: str # 'mysql' / 'directory' artifact_size: Optional[int] artifact_checksum: Optional[str] suggested_targets: list[str] class RestoreRequest(BaseModel): run_id: int target_type: Literal["mysql_db", "directory_path"] target: str = Field(..., min_length=1, description="MySQL 库名 或 目录路径") options: dict = Field(default_factory=dict, description="额外选项,如 {'drop_existing': true}") class RestoreOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: int run_id: int target: str status: str started_at: Optional[datetime] finished_at: Optional[datetime] error_message: Optional[str] created_at: datetime