52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
![]() |
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="设备列表")
|