优化部署流程
This commit is contained in:
@@ -34,12 +34,10 @@
|
||||
|
||||
## 更新摘要
|
||||
**所做更改**
|
||||
- 新增设备持久化子系统:user_device、user_active 表及配套处理器和任务
|
||||
- 新增 OTA 固件升级子系统:ota、black_list、ota_target_device 表及配套仓库层
|
||||
- 更新架构图以反映新的数据流和处理流程
|
||||
- 新增设备上报接口和定时持久化任务
|
||||
- 新增 OTA 升级查询接口和复杂业务逻辑处理
|
||||
- 更新数据访问模式以支持新的业务场景
|
||||
- 更新OTA表结构定义:删除了pawVerCode、pawVerName、pawUrl、pawMd5四列,OTA表现在包含id、verCode、verName、url、md5、force、desc、model、hw、target、beta、startTime、endTime、status等核心字段,简化了数据库结构
|
||||
- 更新数据模型文档以反映OTA表结构的简化
|
||||
- 更新实体关系图和字段定义
|
||||
- 更新数据访问模式和业务逻辑说明
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -56,7 +54,7 @@
|
||||
## 简介
|
||||
本文件面向 Luxsin 应用 API 的数据库与数据模型,系统化梳理实体关系、字段定义、索引与约束、数据访问模式、缓存与搜索集成、性能优化、数据生命周期与迁移路径,并给出品牌(Brand)与型号(Model)实体的设计理念与业务逻辑说明。文档同时覆盖数据库连接配置、查询优化建议、数据安全与隐私要求以及访问控制要点。
|
||||
|
||||
**更新** 本次更新反映了数据库架构的重大扩展,新增了设备持久化和 OTA 固件升级两大核心功能模块,包括 user_device、user_active、ota、black_list、ota_target_device 五个新表及其配套的处理逻辑。
|
||||
**更新** 本次更新反映了OTA表结构的重大简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段,提高了数据库结构的简洁性和可维护性。
|
||||
|
||||
## 项目结构
|
||||
本项目采用分层架构:入口程序负责初始化配置、数据库、搜索引擎与缓存;路由层组织 HTTP 接口;处理器层封装业务接口;仓库层实现数据访问;模型层承载数据结构;搜索与缓存模块作为外部依赖集成。
|
||||
@@ -129,7 +127,7 @@ TASK_DP --> REPO_D
|
||||
- [internal/handler/brand.go:1-50](file://internal/handler/brand.go#L1-L50)
|
||||
- [internal/handler/model.go:1-51](file://internal/handler/model.go#L1-L51)
|
||||
- [internal/handler/device.go:1-83](file://internal/handler/device.go#L1-L83)
|
||||
- [internal/handler/ota.go:1-133](file://internal/handler/ota.go#L1-L133)
|
||||
- [internal/handler/ota.go:1-145](file://internal/handler/ota.go#L1-L145)
|
||||
- [internal/repository/brand.go:1-51](file://internal/repository/brand.go#L1-L51)
|
||||
- [internal/repository/model.go:1-95](file://internal/repository/model.go#L1-L95)
|
||||
- [internal/repository/device.go:1-88](file://internal/repository/device.go#L1-L88)
|
||||
@@ -138,7 +136,7 @@ TASK_DP --> REPO_D
|
||||
- [internal/model/model.go:1-15](file://internal/model/model.go#L1-L15)
|
||||
- [internal/model/user_device.go:1-12](file://internal/model/user_device.go#L1-L12)
|
||||
- [internal/model/user_active.go:1-13](file://internal/model/user_active.go#L1-L13)
|
||||
- [internal/model/ota.go:1-43](file://internal/model/ota.go#L1-L43)
|
||||
- [internal/model/ota.go:1-63](file://internal/model/ota.go#L1-L63)
|
||||
- [internal/task/device_persist.go:1-167](file://internal/task/device_persist.go#L1-L167)
|
||||
|
||||
**章节来源**
|
||||
@@ -148,27 +146,27 @@ TASK_DP --> REPO_D
|
||||
## 核心组件
|
||||
- 数据库表 model:存储耳机型号信息,包含唯一组合索引以保证品牌+型号的唯一性。
|
||||
- 设备持久化表:user_device(设备信息持久化)、user_active(设备活跃度统计)
|
||||
- OTA 升级表:ota(固件升级信息)、black_list(黑名单)、ota_target_device(定向设备)
|
||||
- OTA 升级表:ota(固件升级信息,已简化结构)、black_list(黑名单)、ota_target_device(定向设备)
|
||||
- 模型对象 Brand 与 Model:分别映射品牌与型号的 JSON 字段与数据库列。
|
||||
- 仓库层:提供按品牌名或型号名检索的查询方法,支持模糊匹配与精确匹配。
|
||||
- 处理器层:暴露 HTTP 接口,支持返回 JSON 或 Base64 编码响应。
|
||||
- 配置层:集中加载数据库、搜索引擎与缓存的连接参数,并进行基本校验。
|
||||
- 基础设施:MySQL 连接池配置、Redis 客户端、Meilisearch 搜索客户端。
|
||||
|
||||
**更新** 新增设备持久化和 OTA 升级两大功能模块,包含完整的数据模型、业务逻辑和处理流程。
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
- [sql/user_active.sql:20-208](file://sql/user_active.sql#L20-L208)
|
||||
- [sql/ota.sql:20-47](file://sql/ota.sql#L20-L47)
|
||||
- [sql/black_list.sql:20-33](file://sql/black_list.sql#L20-L33)
|
||||
- [sql/ota_target_device.sql:20-34](file://sql/ota_target_device.sql#L20-L34)
|
||||
- [sql/ota.sql:20-40](file://sql/ota.sql#L20-L40)
|
||||
- [sql/black_list.sql:20-30](file://sql/black_list.sql#L20-L30)
|
||||
- [sql/ota_target_device.sql:20-31](file://sql/ota_target_device.sql#L20-L31)
|
||||
- [internal/model/brand.go:1-7](file://internal/model/brand.go#L1-L7)
|
||||
- [internal/model/model.go:1-15](file://internal/model/model.go#L1-L15)
|
||||
- [internal/model/user_device.go:1-12](file://internal/model/user_device.go#L1-L12)
|
||||
- [internal/model/user_active.go:1-13](file://internal/model/user_active.go#L1-L13)
|
||||
- [internal/model/ota.go:1-43](file://internal/model/ota.go#L1-L43)
|
||||
- [internal/model/ota.go:1-63](file://internal/model/ota.go#L1-L63)
|
||||
- [internal/repository/brand.go:1-51](file://internal/repository/brand.go#L1-L51)
|
||||
- [internal/repository/model.go:1-95](file://internal/repository/model.go#L1-L95)
|
||||
- [internal/repository/device.go:1-88](file://internal/repository/device.go#L1-L88)
|
||||
@@ -176,7 +174,7 @@ TASK_DP --> REPO_D
|
||||
- [internal/handler/brand.go:1-50](file://internal/handler/brand.go#L1-L50)
|
||||
- [internal/handler/model.go:1-51](file://internal/handler/model.go#L1-L51)
|
||||
- [internal/handler/device.go:1-83](file://internal/handler/device.go#L1-L83)
|
||||
- [internal/handler/ota.go:1-133](file://internal/handler/ota.go#L1-L133)
|
||||
- [internal/handler/ota.go:1-145](file://internal/handler/ota.go#L1-L145)
|
||||
- [internal/config/database.go:1-72](file://internal/config/database.go#L1-L72)
|
||||
- [internal/config/meilisearch.go:1-51](file://internal/config/meilisearch.go#L1-L51)
|
||||
- [internal/config/redis.go:1-57](file://internal/config/redis.go#L1-L57)
|
||||
@@ -212,7 +210,7 @@ note over H,RC : "可选:对热点数据进行缓存读写<br/>设备上报:
|
||||
- [internal/handler/brand.go:26-49](file://internal/handler/brand.go#L26-L49)
|
||||
- [internal/handler/model.go:26-50](file://internal/handler/model.go#L26-L50)
|
||||
- [internal/handler/device.go:27-82](file://internal/handler/device.go#L27-L82)
|
||||
- [internal/handler/ota.go:23-132](file://internal/handler/ota.go#L23-L132)
|
||||
- [internal/handler/ota.go:23-144](file://internal/handler/ota.go#L23-L144)
|
||||
- [internal/repository/brand.go:20-50](file://internal/repository/brand.go#L20-L50)
|
||||
- [internal/repository/model.go:20-61](file://internal/repository/model.go#L20-L61)
|
||||
- [internal/repository/device.go:19-87](file://internal/repository/device.go#L19-L87)
|
||||
@@ -234,10 +232,12 @@ note over H,RC : "可选:对热点数据进行缓存读写<br/>设备上报:
|
||||
- Model:id(整数,主键)、brand_name(字符串,非空)、name(字符串,非空)、form(字符串,可空)、rig(字符串,可空)、source(字符串,可空)、eq_key(字符串,可空)、create_at(时间戳,默认当前时间)
|
||||
- UserDevice:id(整数,主键)、mac_addr(字符串,唯一)、model(字符串)、add_time(时间戳,默认当前时间)、ver(字符串,可空)
|
||||
- UserActive:id(整数,主键)、mac_addr(字符串)、model(字符串)、active_date(日期,主键部分)、ip_addr(字符串)、create_at(时间戳,默认当前时间)
|
||||
- OTA:id(整数,主键)、verCode(整数)、verName(字符串)、url(字符串)、md5(字符串)、force(整数,默认0)、desc(字符串,可空)、model(字符串,可空)、hw(整数,默认0)、target(整数,默认0)、beta(整数,默认0)、pawVerCode(整数,默认0)、pawVerName(字符串)、pawUrl(字符串)、pawMd5(字符串)、startTime(时间戳,可空)、endTime(时间戳,可空)、status(整数,默认1)
|
||||
- OTA:id(整数,主键)、verCode(整数)、verName(字符串)、url(字符串)、md5(字符串)、force(整数,默认0)、desc(字符串,可空)、model(字符串,可空)、hw(整数,默认0)、target(整数,默认0)、beta(整数,默认0)、startTime(时间戳,可空)、endTime(时间戳,可空)、status(整数,默认1)
|
||||
- BlackList:id(整数,主键)、ota_id(整数)、mac(字符串,默认空)、create_at(时间戳,默认当前时间)
|
||||
- OTATargetDevice:id(整数,主键)、ota_id(整数)、mac_addr(字符串)、type(整数,默认1,1-白名单;2-黑名单)、create_at(时间戳,默认当前时间)
|
||||
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
BRAND {
|
||||
@@ -281,10 +281,6 @@ string model
|
||||
int hw
|
||||
int target
|
||||
int beta
|
||||
int pawVerCode
|
||||
string pawVerName
|
||||
string pawUrl
|
||||
string pawMd5
|
||||
datetime startTime
|
||||
datetime endTime
|
||||
int status
|
||||
@@ -313,12 +309,12 @@ OTA ||--o{ OTA_TARGET_DEVICE : "定向设备关联"
|
||||
- [internal/model/model.go:5-14](file://internal/model/model.go#L5-L14)
|
||||
- [internal/model/user_device.go:5-11](file://internal/model/user_device.go#L5-L11)
|
||||
- [internal/model/user_active.go:5-12](file://internal/model/user_active.go#L5-L12)
|
||||
- [internal/model/ota.go:6-25](file://internal/model/ota.go#L6-L25)
|
||||
- [internal/model/ota.go:28-42](file://internal/model/ota.go#L28-L42)
|
||||
- [internal/model/ota.go:30-45](file://internal/model/ota.go#L30-L45)
|
||||
- [internal/model/ota.go:47-62](file://internal/model/ota.go#L47-L62)
|
||||
- [sql/model.sql:24-35](file://sql/model.sql#L24-L35)
|
||||
- [sql/user_device.sql:24-32](file://sql/user_device.sql#L24-L32)
|
||||
- [sql/user_active.sql:24-32](file://sql/user_active.sql#L24-L32)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
- [sql/black_list.sql:24-30](file://sql/black_list.sql#L24-L30)
|
||||
- [sql/ota_target_device.sql:24-31](file://sql/ota_target_device.sql#L24-L31)
|
||||
|
||||
@@ -327,13 +323,13 @@ OTA ||--o{ OTA_TARGET_DEVICE : "定向设备关联"
|
||||
- [internal/model/model.go:1-15](file://internal/model/model.go#L1-L15)
|
||||
- [internal/model/user_device.go:1-12](file://internal/model/user_device.go#L1-L12)
|
||||
- [internal/model/user_active.go:1-13](file://internal/model/user_active.go#L1-L13)
|
||||
- [internal/model/ota.go:1-43](file://internal/model/ota.go#L1-L43)
|
||||
- [internal/model/ota.go:1-63](file://internal/model/ota.go#L1-L63)
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
- [sql/user_active.sql:20-208](file://sql/user_active.sql#L20-L208)
|
||||
- [sql/ota.sql:20-47](file://sql/ota.sql#L20-L47)
|
||||
- [sql/black_list.sql:20-33](file://sql/black_list.sql#L20-L33)
|
||||
- [sql/ota_target_device.sql:20-34](file://sql/ota_target_device.sql#L20-L34)
|
||||
- [sql/ota.sql:20-40](file://sql/ota.sql#L20-L40)
|
||||
- [sql/black_list.sql:20-30](file://sql/black_list.sql#L20-L30)
|
||||
- [sql/ota_target_device.sql:20-31](file://sql/ota_target_device.sql#L20-L31)
|
||||
|
||||
### 数据库表结构与约束
|
||||
- 表名:model、user_device、user_active、ota、black_list、ota_target_device
|
||||
@@ -346,15 +342,15 @@ OTA ||--o{ OTA_TARGET_DEVICE : "定向设备关联"
|
||||
- 分区表:user_active 表按 active_date 进行范围分区,包含 170 个分区
|
||||
- 存储引擎与字符集:InnoDB、utf8mb4、排序规则 0900_ai_ci
|
||||
|
||||
**更新** 新增了三个分区表和多个唯一索引约束,增强了数据完整性和查询性能。
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
- [sql/user_active.sql:20-208](file://sql/user_active.sql#L20-L208)
|
||||
- [sql/ota.sql:20-47](file://sql/ota.sql#L20-L47)
|
||||
- [sql/black_list.sql:20-33](file://sql/black_list.sql#L20-L33)
|
||||
- [sql/ota_target_device.sql:20-34](file://sql/ota_target_device.sql#L20-L34)
|
||||
- [sql/ota.sql:20-40](file://sql/ota.sql#L20-L40)
|
||||
- [sql/black_list.sql:20-30](file://sql/black_list.sql#L20-L30)
|
||||
- [sql/ota_target_device.sql:20-31](file://sql/ota_target_device.sql#L20-L31)
|
||||
|
||||
### 数据访问模式
|
||||
- 品牌列表:
|
||||
@@ -413,13 +409,13 @@ end
|
||||
- OTA 升级接口:接收 model、hw、mac、beta 参数,返回合适的 OTA 升级信息
|
||||
- 错误处理:内部错误统一返回 500 并记录日志
|
||||
|
||||
**更新** 新增设备上报和 OTA 升级两个核心接口,支持完整的设备管理和固件升级业务流程。
|
||||
**更新** OTA接口现在使用简化的OTA表结构,不再需要处理pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/brand.go:1-50](file://internal/handler/brand.go#L1-L50)
|
||||
- [internal/handler/model.go:1-51](file://internal/handler/model.go#L1-L51)
|
||||
- [internal/handler/device.go:1-83](file://internal/handler/device.go#L1-L83)
|
||||
- [internal/handler/ota.go:1-133](file://internal/handler/ota.go#L1-L133)
|
||||
- [internal/handler/ota.go:1-145](file://internal/handler/ota.go#L1-L145)
|
||||
|
||||
### 搜索与缓存集成
|
||||
- 搜索:Meilisearch 客户端按给定关键字检索,限定返回属性,支持空命中返回空数组
|
||||
@@ -427,7 +423,7 @@ end
|
||||
- 设备缓存:使用 Redis Hash 存储设备上报信息,键为设备 MAC 地址
|
||||
- 持久化策略:定时任务批量处理 Redis 缓存数据,避免频繁数据库写入
|
||||
|
||||
**更新** 新增了设备信息的 Redis 缓存机制,通过定时任务实现高效的数据持久化。
|
||||
**更新** OTA缓存策略保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/search/meilisearch.go:1-46](file://internal/search/meilisearch.go#L1-L46)
|
||||
@@ -477,12 +473,12 @@ end
|
||||
- 灰度发布:通过 beta 标识实现渐进式升级发布
|
||||
- 强制升级:支持强制升级策略,阻止设备继续使用旧版本
|
||||
|
||||
**新增** OTA 固件升级子系统提供了完整的固件管理能力。
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,查询逻辑相应简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/ota.go:23-132](file://internal/handler/ota.go#L23-L132)
|
||||
- [internal/handler/ota.go:23-144](file://internal/handler/ota.go#L23-L144)
|
||||
- [internal/repository/ota.go:19-158](file://internal/repository/ota.go#L19-L158)
|
||||
- [internal/model/ota.go:6-42](file://internal/model/ota.go#L6-L42)
|
||||
- [internal/model/ota.go:30-45](file://internal/model/ota.go#L30-L45)
|
||||
|
||||
## 依赖分析
|
||||
- 处理器依赖仓库;仓库依赖数据库;应用入口依赖配置与基础设施。
|
||||
@@ -520,7 +516,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- [internal/handler/brand.go:1-50](file://internal/handler/brand.go#L1-L50)
|
||||
- [internal/handler/model.go:1-51](file://internal/handler/model.go#L1-L51)
|
||||
- [internal/handler/device.go:1-83](file://internal/handler/device.go#L1-L83)
|
||||
- [internal/handler/ota.go:1-133](file://internal/handler/ota.go#L1-L133)
|
||||
- [internal/handler/ota.go:1-145](file://internal/handler/ota.go#L1-L145)
|
||||
- [internal/repository/brand.go:1-51](file://internal/repository/brand.go#L1-L51)
|
||||
- [internal/repository/model.go:1-95](file://internal/repository/model.go#L1-L95)
|
||||
- [internal/repository/device.go:1-88](file://internal/repository/device.go#L1-L88)
|
||||
@@ -528,9 +524,9 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
- [sql/user_active.sql:20-208](file://sql/user_active.sql#L20-L208)
|
||||
- [sql/ota.sql:20-47](file://sql/ota.sql#L20-L47)
|
||||
- [sql/black_list.sql:20-33](file://sql/black_list.sql#L20-L33)
|
||||
- [sql/ota_target_device.sql:20-34](file://sql/ota_target_device.sql#L20-L34)
|
||||
- [sql/ota.sql:20-40](file://sql/ota.sql#L20-L40)
|
||||
- [sql/black_list.sql:20-30](file://sql/black_list.sql#L20-L30)
|
||||
- [sql/ota_target_device.sql:20-31](file://sql/ota_target_device.sql#L20-L31)
|
||||
- [internal/task/device_persist.go:1-167](file://internal/task/device_persist.go#L1-L167)
|
||||
|
||||
## 性能考虑
|
||||
@@ -555,7 +551,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- user_active 表按日期分区,提高大数据量下的查询性能
|
||||
- 分区裁剪可以显著减少扫描数据量
|
||||
|
||||
**更新** 新增了设备持久化和 OTA 升级场景的性能优化建议,包括 Redis 缓存策略和分区表优化。
|
||||
**更新** OTA查询逻辑已简化,减少了不必要的字段扫描,提高了查询效率。
|
||||
|
||||
**章节来源**
|
||||
- [internal/database/mysql.go:33-36](file://internal/database/mysql.go#L33-L36)
|
||||
@@ -585,7 +581,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 检查 OTA 表数据完整性和索引状态
|
||||
- 验证黑名单和定向设备表的数据准确性
|
||||
|
||||
**更新** 新增了设备持久化和 OTA 升级相关的故障排查指南。
|
||||
**更新** OTA故障排查已简化,不再需要检查pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/database.go:57-71](file://internal/config/database.go#L57-L71)
|
||||
@@ -595,12 +591,12 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- [internal/handler/brand.go:31-43](file://internal/handler/brand.go#L31-L43)
|
||||
- [internal/handler/model.go:33-43](file://internal/handler/model.go#L33-L43)
|
||||
- [internal/handler/device.go:45-82](file://internal/handler/device.go#L45-L82)
|
||||
- [internal/handler/ota.go:56-132](file://internal/handler/ota.go#L56-L132)
|
||||
- [internal/handler/ota.go:56-144](file://internal/handler/ota.go#L56-L144)
|
||||
- [internal/search/meilisearch.go:17-20](file://internal/search/meilisearch.go#L17-L20)
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
|
||||
## 结论
|
||||
本设计以简洁的表结构与清晰的分层架构支撑品牌与型号的查询需求。通过搜索引擎与缓存提升检索性能,配合连接池与错误处理机制保障稳定性。**更新** 新增的设备持久化和 OTA 固件升级子系统进一步完善了系统的业务能力,通过 Redis 缓存和分区表优化提升了大规模数据处理的性能。后续可在索引策略、缓存策略与数据迁移方面进一步细化,以满足生产环境的高可用与高性能要求。
|
||||
本设计以简洁的表结构与清晰的分层架构支撑品牌与型号的查询需求。通过搜索引擎与缓存提升检索性能,配合连接池与错误处理机制保障稳定性。**更新** OTA表结构的简化显著提高了数据库的简洁性和可维护性,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息。新增的设备持久化和 OTA 固件升级子系统进一步完善了系统的业务能力,通过 Redis 缓存和分区表优化提升了大规模数据处理的性能。后续可在索引策略、缓存策略与数据迁移方面进一步细化,以满足生产环境的高可用与高性能要求。
|
||||
|
||||
## 附录
|
||||
|
||||
@@ -612,12 +608,12 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 时间字段 create_at 默认当前时间,便于审计与排序
|
||||
- 处理器层对空结果返回空数组,避免无效数据传播
|
||||
|
||||
**更新** 新增了设备和 OTA 相关的数据验证规则。
|
||||
**更新** OTA数据验证规则已简化,不再需要验证pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:24-35](file://sql/model.sql#L24-L35)
|
||||
- [sql/user_device.sql:24-32](file://sql/user_device.sql#L24-L32)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
- [sql/black_list.sql:24-30](file://sql/black_list.sql#L24-L30)
|
||||
- [sql/ota_target_device.sql:24-31](file://sql/ota_target_device.sql#L24-L31)
|
||||
- [internal/repository/brand.go:24-27](file://internal/repository/brand.go#L24-L27)
|
||||
@@ -629,13 +625,13 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备示例:id=1214, mac_addr="AA:BB:CC:DD:EE:FF", model="WH-1000XM4", add_time="2026-05-28 17:08:30", ver="1.2.3"
|
||||
- OTA 示例:id=48, verCode=100, verName="v1.2.3", url="http://example.com/firmware.bin", md5="d41d8cd98f00b204e9800998ecf8427e", force=1, desc="重大安全更新", model="WH-1000XM4", hw=1, target=1, beta=0, status=1
|
||||
|
||||
**更新** 新增了设备和 OTA 的示例数据。
|
||||
**更新** OTA示例数据已简化,移除了pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/model/brand.go:4-5](file://internal/model/brand.go#L4-L5)
|
||||
- [internal/model/model.go:6-13](file://internal/model/model.go#L6-L13)
|
||||
- [internal/model/user_device.go:5-11](file://internal/model/user_device.go#L5-L11)
|
||||
- [internal/model/ota.go:6-25](file://internal/model/ota.go#L6-L25)
|
||||
- [internal/model/ota.go:30-45](file://internal/model/ota.go#L30-L45)
|
||||
|
||||
### 数据生命周期、保留策略与归档规则
|
||||
- 建议:基于 create_at 建立分区或定期归档任务,清理长期未使用的型号数据
|
||||
@@ -644,11 +640,11 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 归档策略:保留近一年的活跃型号,历史数据移至冷存储
|
||||
- 审计:保留变更日志与备份周期,确保可追溯性
|
||||
|
||||
**更新** 新增了设备和 OTA 数据的生命周期管理建议。
|
||||
**更新** OTA数据生命周期管理保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [sql/user_active.sql:33-204](file://sql/user_active.sql#L33-L204)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
|
||||
### 数据迁移路径与版本管理
|
||||
- 版本化:每次结构变更生成迁移脚本,记录变更人、时间与目的
|
||||
@@ -657,12 +653,12 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备数据迁移:支持从临时表导入到正式表,处理重复数据
|
||||
- OTA 数据迁移:支持版本号递增和兼容性检查
|
||||
|
||||
**更新** 新增了设备和 OTA 数据的迁移策略。
|
||||
**更新** OTA数据迁移已简化,不需要处理pawVerCode、pawVerName、pawUrl、pawMd5字段的迁移。
|
||||
|
||||
**章节来源**
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
- [sql/user_active.sql:20-208](file://sql/user_active.sql#L20-L208)
|
||||
- [sql/ota.sql:20-47](file://sql/ota.sql#L20-L47)
|
||||
- [sql/ota.sql:20-40](file://sql/ota.sql#L20-L40)
|
||||
|
||||
### 数据安全、隐私要求与访问控制
|
||||
- 网络安全:数据库与搜索引擎通过内网或 VPC 访问,限制入站 IP
|
||||
@@ -671,7 +667,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备隐私:MAC 地址等个人标识信息需遵循隐私保护法规
|
||||
- OTA 安全:固件 MD5 校验确保下载完整性,黑名单机制防止恶意设备升级
|
||||
|
||||
**更新** 新增了设备和 OTA 场景下的安全要求。
|
||||
**更新** OTA安全机制保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/database.go:67-69](file://internal/config/database.go#L67-L69)
|
||||
@@ -697,11 +693,11 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 数据一致性:通过唯一索引和事务保证数据完整性,通过分区表优化查询性能
|
||||
- 可扩展性:模块化设计支持功能扩展,预留接口便于新业务场景接入
|
||||
|
||||
**新增** 设备持久化和 OTA 升级子系统的设计理念和业务逻辑。
|
||||
**更新** OTA设计理念保持不变,但实现逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/model/user_device.go:5-11](file://internal/model/user_device.go#L5-L11)
|
||||
- [internal/model/user_active.go:5-12](file://internal/model/user_active.go#L5-L12)
|
||||
- [internal/model/ota.go:6-42](file://internal/model/ota.go#L6-L42)
|
||||
- [internal/model/ota.go:30-45](file://internal/model/ota.go#L30-L45)
|
||||
- [internal/task/device_persist.go:24-167](file://internal/task/device_persist.go#L24-L167)
|
||||
- [internal/handler/ota.go:23-132](file://internal/handler/ota.go#L23-L132)
|
||||
- [internal/handler/ota.go:23-144](file://internal/handler/ota.go#L23-L144)
|
||||
Reference in New Issue
Block a user