Files
ESP32_GDEY042T81_server/schemas.py
jeremygan2021 bb04bd8fa5 todo_list
2025-11-16 17:36:42 +08:00

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