36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | from datetime import datetime | |||
|  | from typing import Optional, List | |||
|  | from pydantic import BaseModel, Field | |||
|  | 
 | |||
|  | 
 | |||
|  | # ------------------------------ | |||
|  | # 请求模型 | |||
|  | # ------------------------------ | |||
|  | class DeviceActionCreate(BaseModel): | |||
|  |     """设备操作记录创建模型(0=离线、1=上线)""" | |||
|  |     client_ip: str = Field(..., description="客户端IP") | |||
|  |     action: int = Field(..., ge=0, le=1, description="操作状态(0=离线、1=上线)") | |||
|  | 
 | |||
|  | 
 | |||
|  | # ------------------------------ | |||
|  | # 响应模型(单条记录) | |||
|  | # ------------------------------ | |||
|  | class DeviceActionResponse(BaseModel): | |||
|  |     """设备操作记录响应模型(与自增表对齐)""" | |||
|  |     id: int = Field(..., description="自增主键ID") | |||
|  |     client_ip: Optional[str] = Field(None, description="客户端IP") | |||
|  |     action: Optional[int] = Field(None, description="操作状态(0=离线、1=上线)") | |||
|  |     created_at: datetime = Field(..., description="记录创建时间") | |||
|  |     updated_at: datetime = Field(..., description="记录更新时间") | |||
|  | 
 | |||
|  |     # 支持从数据库结果直接转换 | |||
|  |     model_config = {"from_attributes": True} | |||
|  | 
 | |||
|  | 
 | |||
|  | # ------------------------------ | |||
|  | # 列表响应模型(仅含 total + device_actions) | |||
|  | # ------------------------------ | |||
|  | class DeviceActionListResponse(BaseModel): | |||
|  |     """设备操作记录列表(仅核心返回字段)""" | |||
|  |     total: int = Field(..., description="总记录数") | |||
|  |     device_actions: List[DeviceActionResponse] = Field(..., description="操作记录列表") |