import hashlib from datetime import datetime from typing import Optional, List, Dict from pydantic import BaseModel, Field # ------------------------------ # 请求模型(前端传参校验) # ------------------------------ class DeviceCreateRequest(BaseModel): """设备流信息创建请求模型""" ip: Optional[str] = Field(..., max_length=100, description="设备IP地址") hostname: Optional[str] = Field(None, max_length=100, description="设备别名") params: Optional[Dict] = Field(None, description="设备详细信息") def md5_encrypt(text: str) -> str: """对字符串进行MD5加密""" if not text: return "" md5_hash = hashlib.md5() md5_hash.update(text.encode('utf-8')) return md5_hash.hexdigest() # ------------------------------ # 响应模型(后端返回设备数据) # ------------------------------ class DeviceResponse(BaseModel): """设备流信息响应模型(字段与表结构完全对齐)""" id: int = Field(..., description="设备ID") hostname: Optional[str] = Field(None, max_length=100, description="设备别名") rtmp_push_url: Optional[str] = Field(None, description="需要推送的RTMP地址") live_webrtc_url: Optional[str] = Field(None, description="直播的Webrtc地址") detection_webrtc_url: Optional[str] = Field(None, description="检测的Webrtc地址") device_online_status: int = Field(..., description="设备在线状态(1-在线、0-离线)") device_type: Optional[str] = Field(None, description="设备类型") alarm_count: int = Field(..., description="报警次数") params: Optional[str] = Field(None, description="设备详细信息") created_at: datetime = Field(..., description="记录创建时间") updated_at: datetime = Field(..., description="记录更新时间") # 支持从数据库查询结果转换 model_config = {"from_attributes": True} class DeviceListResponse(BaseModel): """设备流信息列表响应模型""" total: int = Field(..., description="设备总数") devices: List[DeviceResponse] = Field(..., description="设备列表")