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="操作记录列表") |