56 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | 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="设备扩展参数(JSON格式)") | |||
|  | 
 | |||
|  | 
 | |||
|  | # ------------------------------ | |||
|  | # 响应模型 | |||
|  | # ------------------------------ | |||
|  | class DeviceResponse(BaseModel): | |||
|  |     """单设备信息响应模型(与数据库表字段对齐)""" | |||
|  |     id: int = Field(..., description="设备主键ID") | |||
|  |     device_id: Optional[int] = Field(None, description="关联设备ID(若历史记录IP无对应设备则为None)") | |||
|  |     hostname: Optional[str] = Field(None, max_length=100, description="设备别名") | |||
|  |     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="扩展参数(JSON字符串)") | |||
|  |     client_ip: Optional[str] = Field(None, max_length=100, description="设备IP地址") | |||
|  |     is_need_handler: int = Field(..., description="是否需要处理(1-需要、0-不需要)") | |||
|  |     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="设备列表") | |||
|  | 
 | |||
|  | 
 | |||
|  | class DeviceStatusHistoryResponse(BaseModel): | |||
|  |     """设备上下线记录响应模型""" | |||
|  |     id: int = Field(..., description="记录ID") | |||
|  |     device_id: int = Field(..., description="关联设备ID") | |||
|  |     client_ip: Optional[str] = Field(None, description="设备IP地址") | |||
|  |     status: int = Field(..., description="状态(1-在线、0-离线)") | |||
|  |     status_time: datetime = Field(..., description="状态变更时间") | |||
|  | 
 | |||
|  |     model_config = {"from_attributes": True} | |||
|  | 
 | |||
|  | 
 | |||
|  | class DeviceStatusHistoryListResponse(BaseModel): | |||
|  |     """设备上下线记录列表响应模型""" | |||
|  |     total: int = Field(..., description="记录总数") | |||
|  |     history: List[DeviceStatusHistoryResponse] = Field(..., description="上下线记录列表") |