from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime # ================= Base Schema ================= class ProxyBase(BaseModel): """代理基础共享属性,定义核心字段及校验规则""" pool_name: str proto: str ip: str port: int username: Optional[str] = None password: Optional[str] = None next_use_time: Optional[datetime] = None time_zone: Optional[str] = None status: Optional[str] = None # ================= Request Schemas ================= class ProxyCreate(ProxyBase): """创建代理 Payload (直接继承 Base,复用所有必填规则)""" pass class ProxyUpdate(ProxyBase): """ 更新代理 Payload 注意:因为是更新,前端可能只传部分字段,所以这里全部重新定义为 Optional """ pool_name: Optional[str] = None proto: Optional[str] = None ip: Optional[str] = None port: Optional[int] = None username: Optional[str] = None password: Optional[str] = None next_use_time: Optional[datetime] = None time_zone: Optional[str] = None status: Optional[str] = None class GetNextIpPayload(BaseModel): """获取下个IP的请求参数""" pools: List[str] proxy_cd: int # ================= Response Schemas ================= class ProxyOut(ProxyBase): """响应返回给前端的代理实体模型 (继承 Base,增加数据库自动生成的字段)""" id: int created_at: datetime updated_at: datetime model_config = { "from_attributes": True }