first commit
This commit is contained in:
89
schemas.py
Normal file
89
schemas.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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
|
||||
Reference in New Issue
Block a user