from pydantic import BaseModel, Field from typing import Dict, Any, Optional from datetime import datetime from app.core.config import ProtocolType, DeviceStatus class DeviceBase(BaseModel): """设备基础模型""" name: str = Field(..., description="设备名称") protocol_type: str = Field(..., description="协议类型") connection_info: Dict[str, Any] = Field(..., description="连接信息") class DeviceCreate(DeviceBase): """创建设备请求模型""" device_id: str = Field(..., description="设备唯一标识") class DeviceUpdate(BaseModel): """更新设备请求模型""" name: Optional[str] = Field(None, description="设备名称") connection_info: Optional[Dict[str, Any]] = Field(None, description="连接信息") class Device(DeviceBase): """设备完整模型""" device_id: str = Field(..., description="设备唯一标识") status: str = Field(default=DeviceStatus.OFFLINE, description="设备状态") created_at: datetime = Field(..., description="创建时间") updated_at: datetime = Field(..., description="更新时间") class Config: from_attributes = True class DeviceList(BaseModel): """设备列表响应模型""" devices: list[Device] = Field(..., description="设备列表") total: int = Field(..., description="设备总数") class DeviceResponse(BaseModel): """设备响应模型""" success: bool = Field(..., description="操作是否成功") message: str = Field(..., description="响应消息") data: Optional[Device] = Field(None, description="设备数据") class DeviceStatusResponse(BaseModel): """设备状态响应模型""" device_id: str = Field(..., description="设备ID") status: str = Field(..., description="设备状态") timestamp: datetime = Field(..., description="状态更新时间")