You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.8 KiB

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="状态更新时间")