115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, Dict, Any
|
|
from datetime import datetime
|
|
|
|
# 设备相关模型
|
|
class DeviceBase(BaseModel):
|
|
device_id: str = Field(..., description="设备唯一标识")
|
|
name: Optional[str] = Field(None, description="设备名称")
|
|
scene: Optional[str] = Field(None, description="设备使用场景")
|
|
|
|
class DeviceCreate(DeviceBase):
|
|
secret: str = Field(..., description="设备密钥")
|
|
|
|
class DeviceUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
scene: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
class Device(DeviceBase):
|
|
id: int
|
|
last_online: datetime
|
|
is_active: bool
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
# 内容相关模型
|
|
class ContentBase(BaseModel):
|
|
title: Optional[str] = Field(None, description="内容标题")
|
|
description: Optional[str] = Field(None, description="内容描述")
|
|
image_path: Optional[str] = Field(None, description="图片路径")
|
|
layout_config: Optional[str] = Field(None, description="布局配置JSON")
|
|
timezone: str = Field("Asia/Shanghai", description="时区")
|
|
time_format: str = Field("%Y-%m-%d %H:%M", description="时间显示格式")
|
|
|
|
class ContentCreate(ContentBase):
|
|
device_id: str = Field(..., description="设备ID")
|
|
|
|
class ContentUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
image_path: Optional[str] = None
|
|
layout_config: Optional[str] = None
|
|
timezone: Optional[str] = None
|
|
time_format: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
class Content(ContentBase):
|
|
id: int
|
|
device_id: str
|
|
version: int
|
|
is_active: bool
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
# 响应模型
|
|
class BootstrapResponse(BaseModel):
|
|
device_id: str
|
|
content_version: Optional[int] = None
|
|
timezone: str
|
|
time_format: str
|
|
last_updated: Optional[datetime] = None
|
|
|
|
class ContentResponse(BaseModel):
|
|
version: int
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
image_url: Optional[str] = None
|
|
layout_config: Optional[Dict[str, Any]] = None
|
|
timezone: str
|
|
time_format: str
|
|
created_at: datetime
|
|
|
|
# MQTT消息模型
|
|
class MQTTCommand(BaseModel):
|
|
type: str = Field(..., description="命令类型")
|
|
content_version: Optional[int] = None
|
|
timestamp: Optional[int] = None
|
|
|
|
class MQTTStatus(BaseModel):
|
|
event: str = Field(..., description="事件类型")
|
|
content_version: Optional[int] = None
|
|
timestamp: int = Field(..., description="时间戳")
|
|
device_id: str = Field(..., description="设备ID")
|
|
message: Optional[str] = None
|
|
|
|
# 待办事项相关模型
|
|
class TodoBase(BaseModel):
|
|
title: str = Field(..., description="待办事项标题")
|
|
description: Optional[str] = Field(None, description="待办事项描述")
|
|
due_date: Optional[datetime] = Field(None, description="截止日期")
|
|
|
|
class TodoCreate(TodoBase):
|
|
device_id: str = Field(..., description="设备ID")
|
|
|
|
class TodoUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
due_date: Optional[datetime] = None
|
|
is_completed: Optional[bool] = None
|
|
|
|
class Todo(TodoBase):
|
|
id: int
|
|
device_id: str
|
|
is_completed: bool
|
|
completed_at: Optional[datetime] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True |