添加ESP系列设备的OTA
This commit is contained in:
125
model/firmware.py
Normal file
125
model/firmware.py
Normal file
@@ -0,0 +1,125 @@
|
||||
"""固件包数据模型,用于 ESP32/8266 OTA 在线升级功能。"""
|
||||
|
||||
from datetime import datetime
|
||||
from enum import StrEnum
|
||||
from typing import TYPE_CHECKING
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import Field, Relationship, String, Text
|
||||
|
||||
from .base import SQLModelBase, UUIDTableBase
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .user import User
|
||||
|
||||
|
||||
class ChipTypeEnum(StrEnum):
|
||||
"""ESP 芯片类型枚举"""
|
||||
esp32 = 'esp32'
|
||||
esp8266 = 'esp8266'
|
||||
esp32s2 = 'esp32s2'
|
||||
esp32s3 = 'esp32s3'
|
||||
esp32c3 = 'esp32c3'
|
||||
|
||||
|
||||
class FirmwareBase(SQLModelBase):
|
||||
chip_type: ChipTypeEnum = Field(index=True)
|
||||
"""芯片类型"""
|
||||
|
||||
version: str = Field(sa_type=String(64), index=True)
|
||||
"""固件版本号,遵循语义化版本规范"""
|
||||
|
||||
file_path: str
|
||||
"""固件文件存储路径"""
|
||||
|
||||
file_size: int
|
||||
"""固件文件大小(字节)"""
|
||||
|
||||
file_md5: str = Field(max_length=32)
|
||||
"""固件文件 MD5 校验值"""
|
||||
|
||||
description: str | None = Field(default=None, sa_type=Text)
|
||||
"""固件更新说明"""
|
||||
|
||||
is_active: bool = Field(default=True, index=True)
|
||||
"""是否启用该固件版本"""
|
||||
|
||||
|
||||
class Firmware(FirmwareBase, UUIDTableBase, table=True):
|
||||
"""固件包表"""
|
||||
|
||||
uploaded_by_id: UUID = Field(foreign_key='user.id', ondelete='RESTRICT')
|
||||
"""上传者用户ID"""
|
||||
|
||||
downloaded_count: int = Field(default=0)
|
||||
"""下载次数统计"""
|
||||
|
||||
uploaded_at: datetime = Field(default_factory=datetime.now)
|
||||
"""上传时间"""
|
||||
|
||||
uploaded_by: 'User' = Relationship(back_populates='firmwares')
|
||||
|
||||
|
||||
# DTO 定义
|
||||
|
||||
class FirmwareDataResponse(FirmwareBase):
|
||||
"""固件信息响应"""
|
||||
id: UUID
|
||||
"""固件ID"""
|
||||
|
||||
downloaded_count: int
|
||||
"""下载次数"""
|
||||
|
||||
uploaded_at: datetime
|
||||
"""上传时间"""
|
||||
|
||||
download_url: str | None = None
|
||||
"""下载地址"""
|
||||
|
||||
|
||||
class FirmwareDataResponseAdmin(FirmwareDataResponse):
|
||||
"""固件信息响应(管理员)"""
|
||||
uploaded_by_id: UUID
|
||||
"""上传者ID"""
|
||||
|
||||
|
||||
class FirmwareUploadRequest(SQLModelBase):
|
||||
"""固件上传请求"""
|
||||
chip_type: ChipTypeEnum
|
||||
"""芯片类型"""
|
||||
|
||||
version: str
|
||||
"""版本号字符串"""
|
||||
|
||||
description: str | None = None
|
||||
"""更新说明"""
|
||||
|
||||
|
||||
class FirmwareCheckUpdateRequest(SQLModelBase):
|
||||
"""设备检查更新请求"""
|
||||
chip_type: ChipTypeEnum
|
||||
"""芯片类型"""
|
||||
|
||||
current_version: str
|
||||
"""当前版本号"""
|
||||
|
||||
|
||||
class FirmwareCheckUpdateResponse(SQLModelBase):
|
||||
"""检查更新响应"""
|
||||
has_update: bool
|
||||
"""是否有可用更新"""
|
||||
|
||||
latest_version: str | None = None
|
||||
"""最新版本号"""
|
||||
|
||||
download_url: str | None = None
|
||||
"""下载地址"""
|
||||
|
||||
file_size: int | None = None
|
||||
"""文件大小"""
|
||||
|
||||
file_md5: str | None = None
|
||||
"""文件MD5"""
|
||||
|
||||
description: str | None = None
|
||||
"""更新说明"""
|
||||
Reference in New Issue
Block a user