优化部署流程
This commit is contained in:
@@ -31,20 +31,20 @@
|
||||
- [pkg/encode/base64.go](file://pkg/encode/base64.go)
|
||||
- [sql/model.sql](file://sql/model.sql)
|
||||
- [sql/ota.sql](file://sql/ota.sql)
|
||||
- [sql/ota_target_device.sql](file://sql/ota_target_device.sql)
|
||||
- [sql/black_list.sql](file://sql/black_list.sql)
|
||||
- [sql/share_code_log.sql](file://sql/share_code_log.sql)
|
||||
- [sql/user_device.sql](file://sql/user_device.sql)
|
||||
- [sql/user_active.sql](file://sql/user_active.sql)
|
||||
- [sql/ota_target_device.sql](file://sql/ota_target_device.sql)
|
||||
- [cmd/server/main.go](file://cmd/server/main.go)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**变更内容**
|
||||
- 新增分享代码数据模型(ShareCodeData)和相关处理流程
|
||||
- 新增目标数据模型(Target),支持曲线目标配置
|
||||
- 增强OTA模型,支持布尔值序列化和更多字段
|
||||
- 新增分享码持久化任务和Redis缓存机制
|
||||
- 扩展路由配置以支持分享码相关API端点
|
||||
- OTA模型字段简化:移除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,OTA结构现在更加简洁
|
||||
- OTA模型现在包含核心字段:verCode、verName、url、md5、force、desc、model、hw、target、beta、startTime、endTime、status
|
||||
- 数据库表结构同步更新,移除了对应的冗余列
|
||||
- 仓库层和处理器层相应调整,移除了对冗余字段的处理
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -158,7 +158,7 @@ CACHE --> SHARE_TTL
|
||||
- [internal/handler/brand.go:19-50](file://internal/handler/brand.go#L19-L50)
|
||||
- [internal/handler/model.go:19-51](file://internal/handler/model.go#L19-L51)
|
||||
- [internal/handler/model_list.go:19-57](file://internal/handler/model_list.go#L19-L57)
|
||||
- [internal/handler/ota.go:14-133](file://internal/handler/ota.go#L14-L133)
|
||||
- [internal/handler/ota.go:14-145](file://internal/handler/ota.go#L14-L145)
|
||||
- [internal/handler/device.go:15-83](file://internal/handler/device.go#L15-L83)
|
||||
- [internal/handler/share_code.go:1-383](file://internal/handler/share_code.go#L1-L383)
|
||||
- [internal/handler/curve.go:1-582](file://internal/handler/curve.go#L1-L582)
|
||||
@@ -170,7 +170,7 @@ CACHE --> SHARE_TTL
|
||||
- [internal/repository/curve.go:1-66](file://internal/repository/curve.go#L1-L66)
|
||||
- [internal/model/brand.go:3-7](file://internal/model/brand.go#L3-L7)
|
||||
- [internal/model/model.go:5-15](file://internal/model/model.go#L5-L15)
|
||||
- [internal/model/ota.go:5-67](file://internal/model/ota.go#L5-L67)
|
||||
- [internal/model/ota.go:5-63](file://internal/model/ota.go#L5-L63)
|
||||
- [internal/model/user_device.go:5-12](file://internal/model/user_device.go#L5-L12)
|
||||
- [internal/model/user_active.go:5-13](file://internal/model/user_active.go#L5-L13)
|
||||
- [internal/model/share_code.go:14-25](file://internal/model/share_code.go#L14-L25)
|
||||
@@ -180,11 +180,12 @@ CACHE --> SHARE_TTL
|
||||
- [internal/config/database.go:17-72](file://internal/config/database.go#L17-L72)
|
||||
- [internal/config/share_code_ttl.go:12-60](file://internal/config/share_code_ttl.go#L12-L60)
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
- [sql/ota.sql:23-44](file://sql/ota.sql#L23-L44)
|
||||
- [sql/ota.sql:23-40](file://sql/ota.sql#L23-L40)
|
||||
- [sql/ota_target_device.sql:23-31](file://sql/ota_target_device.sql#L23-L31)
|
||||
- [sql/black_list.sql:23-30](file://sql/black_list.sql#L23-L30)
|
||||
- [sql/share_code_log.sql:8-23](file://sql/share_code_log.sql#L8-L23)
|
||||
- [sql/user_device.sql:23-32](file://sql/user_device.sql#L23-L32)
|
||||
- [sql/user_active.sql:23-32](file://sql/user_active.sql#L23-L32)
|
||||
- [sql/ota_target_device.sql:23-31](file://sql/ota_target_device.sql#L23-L31)
|
||||
- [internal/task/device_persist.go:14-167](file://internal/task/device_persist.go#L14-L167)
|
||||
- [internal/task/share_code_persist.go:1-232](file://internal/task/share_code_persist.go#L1-L232)
|
||||
|
||||
@@ -230,7 +231,7 @@ CACHE --> SHARE_TTL
|
||||
**章节来源**
|
||||
- [internal/model/brand.go:3-7](file://internal/model/brand.go#L3-L7)
|
||||
- [internal/model/model.go:5-15](file://internal/model/model.go#L5-L15)
|
||||
- [internal/model/ota.go:5-67](file://internal/model/ota.go#L5-L67)
|
||||
- [internal/model/ota.go:5-63](file://internal/model/ota.go#L5-L63)
|
||||
- [internal/model/share_code.go:14-25](file://internal/model/share_code.go#L14-L25)
|
||||
- [internal/model/target.go:5-14](file://internal/model/target.go#L5-L14)
|
||||
- [internal/model/user_device.go:5-12](file://internal/model/user_device.go#L5-L12)
|
||||
@@ -244,7 +245,7 @@ CACHE --> SHARE_TTL
|
||||
- [internal/handler/brand.go:26-50](file://internal/handler/brand.go#L26-L50)
|
||||
- [internal/handler/model.go:26-51](file://internal/handler/model.go#L26-L51)
|
||||
- [internal/handler/model_list.go:26-57](file://internal/handler/model_list.go#L26-L57)
|
||||
- [internal/handler/ota.go:23-133](file://internal/handler/ota.go#L23-L133)
|
||||
- [internal/handler/ota.go:23-145](file://internal/handler/ota.go#L23-L145)
|
||||
- [internal/handler/device.go:27-83](file://internal/handler/device.go#L27-L83)
|
||||
- [internal/handler/share_code.go:15-383](file://internal/handler/share_code.go#L15-L383)
|
||||
- [internal/handler/curve.go:27-582](file://internal/handler/curve.go#L27-L582)
|
||||
@@ -402,42 +403,41 @@ ModelRepository --> Model : "返回"
|
||||
### OTA 固件升级模型
|
||||
- **设计理念**
|
||||
- OTA模型用于管理固件升级信息,支持强制升级、灰度发布、定向升级等功能。
|
||||
- **更新**:OTA模型已简化,移除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,现在只包含核心升级信息字段。
|
||||
- **字段定义与约束**
|
||||
- OTA模型:
|
||||
- id:整数,主键,自增。
|
||||
- verCode:整数,版本号,用于排序。
|
||||
- verName:字符串,版本名称。
|
||||
- url:字符串,固件下载地址。
|
||||
- md5:字符串,固件MD5校验值。
|
||||
- force:BoolInt,是否强制升级(true/false)。
|
||||
- desc:字符串指针,升级描述。
|
||||
- model:字符串指针,对应设备型号。
|
||||
- hw:整数,硬件版本号。
|
||||
- target:BoolInt,是否定向升级(true/false)。
|
||||
- beta:BoolInt,是否灰度发布(true/false)。
|
||||
- pawVerCode:整数,配套软件版本号。
|
||||
- pawVerName:字符串,配套软件版本名称。
|
||||
- pawUrl:字符串,配套软件下载地址。
|
||||
- pawMD5:字符串,配套软件MD5校验值。
|
||||
- startTime:时间戳指针,升级开始时间。
|
||||
- endTime:时间戳指针,升级结束时间。
|
||||
- status:整数,状态(1-可用,0-不可用)。
|
||||
- VerCode:整数,版本号,用于排序。
|
||||
- VerName:字符串,版本名称。
|
||||
- URL:字符串,固件下载地址。
|
||||
- MD5:字符串,固件MD5校验值。
|
||||
- Force:BoolInt,是否强制升级(true/false)。
|
||||
- Desc:字符串指针,升级描述。
|
||||
- Model:字符串指针,对应设备型号。
|
||||
- HW:整数,硬件版本号。
|
||||
- Target:BoolInt,是否定向升级(true/false)。
|
||||
- Beta:BoolInt,是否灰度发布(true/false)。
|
||||
- StartTime:时间戳指针,升级开始时间。
|
||||
- EndTime:时间戳指针,升级结束时间。
|
||||
- Status:整数,状态(1-可用,0-不可用)。
|
||||
- BlackList模型:
|
||||
- id:整数,主键,自增。
|
||||
- ota_id:整数,关联OTA记录ID。
|
||||
- mac:字符串,设备MAC地址。
|
||||
- create_at:时间戳,创建时间。
|
||||
- OTAID:整数,关联OTA记录ID。
|
||||
- Mac:字符串,设备MAC地址。
|
||||
- CreateAt:时间戳,创建时间。
|
||||
- OTATargetDevice模型:
|
||||
- id:整数,主键,自增。
|
||||
- ota_id:整数,关联OTA记录ID。
|
||||
- mac_addr:字符串,设备MAC地址。
|
||||
- type:整数,类型(1-白名单,2-黑名单)。
|
||||
- create_at:时间戳,创建时间。
|
||||
- OTAID:整数,关联OTA记录ID。
|
||||
- MacAddr:字符串,设备MAC地址。
|
||||
- Type:整数,类型(1-白名单,2-黑名单)。
|
||||
- CreateAt:时间戳,创建时间。
|
||||
- **业务含义**
|
||||
- 支持复杂的固件升级策略,包括强制升级、灰度发布、定向升级和黑名单管理。
|
||||
- 简化的字段结构提高了数据模型的清晰度和维护性。
|
||||
- **数据库映射**
|
||||
- 表名:ota、black_list、ota_target_device。
|
||||
- 字段:完整映射关系详见数据库表结构。
|
||||
- **更新**:OTA表不再包含pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
- **ORM 映射配置**
|
||||
- 使用 sql.NullString 和 sql.NullTime 扫描可空列。
|
||||
- BoolInt类型支持数据库整型与JSON布尔值的双向转换。
|
||||
@@ -449,37 +449,33 @@ ModelRepository --> Model : "返回"
|
||||
```mermaid
|
||||
classDiagram
|
||||
class OTA {
|
||||
+int id
|
||||
+int verCode
|
||||
+string verName
|
||||
+string url
|
||||
+string md5
|
||||
+BoolInt force
|
||||
+*string desc
|
||||
+*string model
|
||||
+int hw
|
||||
+BoolInt target
|
||||
+BoolInt beta
|
||||
+int pawVerCode
|
||||
+string pawVerName
|
||||
+string pawUrl
|
||||
+string pawMD5
|
||||
+*time startTime
|
||||
+*time endTime
|
||||
+int status
|
||||
+int ID
|
||||
+int VerCode
|
||||
+string VerName
|
||||
+string URL
|
||||
+string MD5
|
||||
+BoolInt Force
|
||||
+*string Desc
|
||||
+*string Model
|
||||
+int HW
|
||||
+BoolInt Target
|
||||
+BoolInt Beta
|
||||
+*time StartTime
|
||||
+*time EndTime
|
||||
+int Status
|
||||
}
|
||||
class BlackList {
|
||||
+int id
|
||||
+int ota_id
|
||||
+string mac
|
||||
+time create_at
|
||||
+int ID
|
||||
+int OTAID
|
||||
+string Mac
|
||||
+time CreateAt
|
||||
}
|
||||
class OTATargetDevice {
|
||||
+int id
|
||||
+int ota_id
|
||||
+string mac_addr
|
||||
+int type
|
||||
+time create_at
|
||||
+int ID
|
||||
+int OTAID
|
||||
+string MacAddr
|
||||
+int Type
|
||||
+time CreateAt
|
||||
}
|
||||
class OTARepository {
|
||||
-db *sql.DB
|
||||
@@ -495,15 +491,15 @@ OTARepository --> OTATargetDevice : "返回"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [internal/model/ota.go:29-67](file://internal/model/ota.go#L29-L67)
|
||||
- [internal/model/ota.go:29-63](file://internal/model/ota.go#L29-L63)
|
||||
- [internal/repository/ota.go:19-159](file://internal/repository/ota.go#L19-L159)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
- [sql/ota_target_device.sql:24-31](file://sql/ota_target_device.sql#L24-L31)
|
||||
|
||||
**章节来源**
|
||||
- [internal/model/ota.go:5-67](file://internal/model/ota.go#L5-L67)
|
||||
- [internal/model/ota.go:5-63](file://internal/model/ota.go#L5-L63)
|
||||
- [internal/repository/ota.go:19-159](file://internal/repository/ota.go#L19-L159)
|
||||
- [sql/ota.sql:23-44](file://sql/ota.sql#L23-L44)
|
||||
- [sql/ota.sql:23-40](file://sql/ota.sql#L23-L40)
|
||||
- [sql/ota_target_device.sql:23-31](file://sql/ota_target_device.sql#L23-L31)
|
||||
|
||||
### 分享码数据模型
|
||||
@@ -714,6 +710,7 @@ DeviceRepository --> UserActive : "返回"
|
||||
- **OTA处理器特殊逻辑**
|
||||
- 支持参数校验、黑名单检查、定向设备检查等复杂业务逻辑。
|
||||
- 根据不同情况返回不同的OTA升级信息。
|
||||
- **更新**:OTA处理器现在处理简化的字段结构,移除了对paw*字段的处理。
|
||||
- **设备处理器特殊逻辑**
|
||||
- 将设备信息写入Redis缓存,支持异步持久化。
|
||||
- 提供设备信息上报接口。
|
||||
@@ -760,7 +757,7 @@ H-->>C : "200 OK + EQ数据"
|
||||
- [internal/handler/brand.go:26-50](file://internal/handler/brand.go#L26-L50)
|
||||
- [internal/handler/model.go:26-51](file://internal/handler/model.go#L26-L51)
|
||||
- [internal/handler/model_list.go:26-57](file://internal/handler/model_list.go#L26-L57)
|
||||
- [internal/handler/ota.go:23-133](file://internal/handler/ota.go#L23-L133)
|
||||
- [internal/handler/ota.go:23-145](file://internal/handler/ota.go#L23-L145)
|
||||
- [internal/handler/device.go:27-83](file://internal/handler/device.go#L27-L83)
|
||||
- [internal/handler/share_code.go:15-383](file://internal/handler/share_code.go#L15-L383)
|
||||
- [internal/handler/curve.go:27-582](file://internal/handler/curve.go#L27-L582)
|
||||
@@ -777,6 +774,7 @@ H-->>C : "200 OK + EQ数据"
|
||||
- 支持按model+hw+beta+status=1查询最新OTA记录。
|
||||
- 支持黑名单检查和定向设备检查。
|
||||
- 提供多种查询策略以适应不同的升级场景。
|
||||
- **更新**:OTA查询现在使用简化的字段列表,移除了对paw*字段的查询。
|
||||
- **设备查询**
|
||||
- 支持按MAC地址查询设备信息。
|
||||
- 支持按MAC地址和日期查询活跃记录。
|
||||
@@ -882,7 +880,7 @@ Task_Share --> Redis
|
||||
- [internal/handler/brand.go:14-50](file://internal/handler/brand.go#L14-L50)
|
||||
- [internal/handler/model.go:14-51](file://internal/handler/model.go#L14-L51)
|
||||
- [internal/handler/model_list.go:14-57](file://internal/handler/model_list.go#L14-L57)
|
||||
- [internal/handler/ota.go:14-133](file://internal/handler/ota.go#L14-L133)
|
||||
- [internal/handler/ota.go:14-145](file://internal/handler/ota.go#L14-L145)
|
||||
- [internal/handler/device.go:15-83](file://internal/handler/device.go#L15-L83)
|
||||
- [internal/handler/share_code.go:15-383](file://internal/handler/share_code.go#L15-L383)
|
||||
- [internal/handler/curve.go:27-582](file://internal/handler/curve.go#L27-L582)
|
||||
@@ -909,6 +907,7 @@ Task_Share --> Redis
|
||||
- UserActive表对(mac_addr, active_date)建立联合索引,支持按日期分区查询。
|
||||
- share_code_log表对(mac_addr, share_code, create_at)建立索引,支持分享码查询。
|
||||
- 查询时优先按品牌名匹配,减少 LIKE 的范围。
|
||||
- **更新**:OTA查询现在使用简化的字段列表,减少了不必要的字段扫描。
|
||||
- **扫描与内存**
|
||||
- 使用 sql.NullString 扫描可空列,避免零值歧义;转换为指针字符串减少冗余存储。
|
||||
- OTA模型使用BoolInt类型处理布尔值,支持数据库整型与JSON布尔值的双向转换。
|
||||
@@ -927,7 +926,7 @@ Task_Share --> Redis
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:34-35](file://sql/model.sql#L34-L35)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
- [sql/share_code_log.sql:20-23](file://sql/share_code_log.sql#L20-L23)
|
||||
- [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)
|
||||
@@ -957,6 +956,7 @@ Task_Share --> Redis
|
||||
- 检查Redis:确认设备信息、分享码数据是否正确写入Redis缓存。
|
||||
- 监控任务:确认设备持久化任务和分享码持久化任务是否按预期执行。
|
||||
- 检查分布式锁:确认分享码操作的分布式锁状态和超时处理。
|
||||
- **更新**:检查OTA表结构,确认paw*字段不存在,验证简化的字段结构。
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/database.go:57-72](file://internal/config/database.go#L57-L72)
|
||||
@@ -965,12 +965,16 @@ Task_Share --> Redis
|
||||
- [internal/handler/model_list.go:39-42](file://internal/handler/model_list.go#L39-L42)
|
||||
- [internal/handler/ota.go:31-48](file://internal/handler/ota.go#L31-L48)
|
||||
- [internal/handler/device.go:33-39](file://internal/handler/device.go#L33-L39)
|
||||
- [internal/handler/share_code.go:46-81](file://internal/handler/share_code.go#L46-81)
|
||||
- [internal/handler/share_code.go:46-81](file://internal/handler/share_code.go#L46-L81)
|
||||
- [internal/handler/curve.go:302-368](file://internal/handler/curve.go#L302-L368)
|
||||
- [internal/response/response.go:30-37](file://internal/response/response.go#L30-L37)
|
||||
|
||||
## 结论
|
||||
本项目的数据模型设计简洁明确:Brand 与 Model 分别承担品牌与型号的维度,通过仓库层的原生 SQL 访问实现高效查询;处理器层统一响应与可选编码,提升传输效率与前端体验。新增的分享码功能、目标曲线模型和增强的OTA模型进一步完善了系统的数据模型体系,支持复杂的固件升级策略、设备信息跟踪、用户行为分析和EQ数据分享功能。数据库层面通过唯一索引与合理字段设计保障一致性与性能。Redis缓存层提供了高性能的临时数据存储和分布式锁机制。建议在后续迭代中引入显式的校验与转换层,增强健壮性与可维护性,同时考虑添加更多的监控指标和告警机制。
|
||||
本项目的数据模型设计简洁明确:Brand 与 Model 分别承担品牌与型号的维度,通过仓库层的原生 SQL 访问实现高效查询;处理器层统一响应与可选编码,提升传输效率与前端体验。新增的分享码功能、目标曲线模型和增强的OTA模型进一步完善了系统的数据模型体系,支持复杂的固件升级策略、设备信息跟踪、用户行为分析和EQ数据分享功能。数据库层面通过唯一索引与合理字段设计保障一致性与性能。Redis缓存层提供了高性能的临时数据存储和分布式锁机制。
|
||||
|
||||
**更新**:OTA模型经过简化重构,移除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,现在只包含核心升级信息,提高了数据模型的清晰度和维护性。新的字段结构更加简洁,减少了不必要的数据冗余,同时保持了完整的升级策略支持能力。
|
||||
|
||||
建议在后续迭代中引入显式的校验与转换层,增强健壮性与可维护性,同时考虑添加更多的监控指标和告警机制。
|
||||
|
||||
## 附录
|
||||
|
||||
@@ -979,8 +983,9 @@ Task_Share --> Redis
|
||||
- 字段:id(主键)、brand_name、name、form、rig、source、eq_key、create_at。
|
||||
- 约束:唯一索引 (brand_name, name)。
|
||||
- **表:ota**
|
||||
- 字段:id(主键)、verCode、verName、url、md5、force、desc、model、hw、target、beta、pawVerCode、pawVerName、pawUrl、pawMd5、startTime、endTime、status。
|
||||
- 字段:id(主键)、verCode、verName、url、md5、force、desc、model、hw、target、beta、startTime、endTime、status。
|
||||
- 约束:无显式约束。
|
||||
- **更新**:移除了pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
- **表:black_list**
|
||||
- 字段:id(主键)、ota_id、mac、create_at。
|
||||
- 约束:无显式约束。
|
||||
@@ -1003,33 +1008,29 @@ Task_Share --> Redis
|
||||
- Model.id ↔ model.id
|
||||
- Model.brandName ↔ model.brand_name
|
||||
- Model.name ↔ model.name
|
||||
- OTA.id ↔ ota.id
|
||||
- OTA.verCode ↔ ota.verCode
|
||||
- OTA.verName ↔ ota.verName
|
||||
- OTA.url ↔ ota.url
|
||||
- OTA.md5 ↔ ota.md5
|
||||
- OTA.force ↔ ota.force
|
||||
- OTA.desc ↔ ota.desc
|
||||
- OTA.model ↔ ota.model
|
||||
- OTA.hw ↔ ota.hw
|
||||
- OTA.target ↔ ota.target
|
||||
- OTA.beta ↔ ota.beta
|
||||
- OTA.pawVerCode ↔ ota.pawVerCode
|
||||
- OTA.pawVerName ↔ ota.pawVerName
|
||||
- OTA.pawUrl ↔ ota.pawUrl
|
||||
- OTA.pawMD5 ↔ ota.pawMD5
|
||||
- OTA.startTime ↔ ota.startTime
|
||||
- OTA.endTime ↔ ota.endTime
|
||||
- OTA.status ↔ ota.status
|
||||
- BlackList.id ↔ black_list.id
|
||||
- BlackList.ota_id ↔ black_list.ota_id
|
||||
- BlackList.mac ↔ black_list.mac
|
||||
- BlackList.create_at ↔ black_list.create_at
|
||||
- OTATargetDevice.id ↔ ota_target_device.id
|
||||
- OTATargetDevice.ota_id ↔ ota_target_device.ota_id
|
||||
- OTATargetDevice.mac_addr ↔ ota_target_device.mac_addr
|
||||
- OTATargetDevice.type ↔ ota_target_device.type
|
||||
- OTATargetDevice.create_at ↔ ota_target_device.create_at
|
||||
- OTA.ID ↔ ota.id
|
||||
- OTA.VerCode ↔ ota.verCode
|
||||
- OTA.VerName ↔ ota.verName
|
||||
- OTA.URL ↔ ota.url
|
||||
- OTA.MD5 ↔ ota.md5
|
||||
- OTA.Force ↔ ota.force
|
||||
- OTA.Desc ↔ ota.desc
|
||||
- OTA.Model ↔ ota.model
|
||||
- OTA.HW ↔ ota.hw
|
||||
- OTA.Target ↔ ota.target
|
||||
- OTA.Beta ↔ ota.beta
|
||||
- OTA.StartTime ↔ ota.startTime
|
||||
- OTA.EndTime ↔ ota.endTime
|
||||
- OTA.Status ↔ ota.status
|
||||
- BlackList.ID ↔ black_list.id
|
||||
- BlackList.OTAID ↔ black_list.ota_id
|
||||
- BlackList.Mac ↔ black_list.mac
|
||||
- BlackList.CreateAt ↔ black_list.create_at
|
||||
- OTATargetDevice.ID ↔ ota_target_device.id
|
||||
- OTATargetDevice.OTAID ↔ ota_target_device.ota_id
|
||||
- OTATargetDevice.MacAddr ↔ ota_target_device.mac_addr
|
||||
- OTATargetDevice.Type ↔ ota_target_device.type
|
||||
- OTATargetDevice.CreateAt ↔ ota_target_device.create_at
|
||||
- UserDevice.id ↔ user_device.id
|
||||
- UserDevice.mac_addr ↔ user_device.mac_addr
|
||||
- UserDevice.model ↔ user_device.model
|
||||
@@ -1059,14 +1060,15 @@ Task_Share --> Redis
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:24-35](file://sql/model.sql#L24-L35)
|
||||
- [sql/ota.sql:24-44](file://sql/ota.sql#L24-L44)
|
||||
- [sql/ota.sql:24-40](file://sql/ota.sql#L24-L40)
|
||||
- [sql/ota_target_device.sql:24-31](file://sql/ota_target_device.sql#L24-L31)
|
||||
- [sql/black_list.sql:24-30](file://sql/black_list.sql#L24-L30)
|
||||
- [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/share_code_log.sql:9-23](file://sql/share_code_log.sql#L9-L23)
|
||||
- [sql/target.sql:24-31](file://sql/target.sql#L24-L31)
|
||||
- [internal/model/model.go:5-15](file://internal/model/model.go#L5-L15)
|
||||
- [internal/model/ota.go:29-67](file://internal/model/ota.go#L29-L67)
|
||||
- [internal/model/ota.go:29-63](file://internal/model/ota.go#L29-L63)
|
||||
- [internal/model/user_device.go:5-12](file://internal/model/user_device.go#L5-L12)
|
||||
- [internal/model/user_active.go:5-13](file://internal/model/user_active.go#L5-L13)
|
||||
- [internal/model/share_code.go:14-25](file://internal/model/share_code.go#L14-L25)
|
||||
@@ -1096,7 +1098,8 @@ Task_Share --> Redis
|
||||
- 方法:GET
|
||||
- 参数:model(必需)、hw(必需)、mac(可选)、beta(可选)、base64Resp(可选)
|
||||
- 返回:OTA对象或 Base64 编码后的 JSON
|
||||
- 参考路径:[internal/handler/ota.go:23-133](file://internal/handler/ota.go#L23-L133)
|
||||
- **更新**:返回的OTA对象现在包含简化的字段结构
|
||||
- 参考路径:[internal/handler/ota.go:23-145](file://internal/handler/ota.go#L23-L145)
|
||||
- **设备信息上报**
|
||||
- 路由:/audio/reportDevInfo
|
||||
- 方法:GET
|
||||
@@ -1133,7 +1136,7 @@ Task_Share --> Redis
|
||||
- [internal/handler/brand.go:26-50](file://internal/handler/brand.go#L26-L50)
|
||||
- [internal/handler/model.go:26-51](file://internal/handler/model.go#L26-L51)
|
||||
- [internal/handler/model_list.go:26-57](file://internal/handler/model_list.go#L26-L57)
|
||||
- [internal/handler/ota.go:23-133](file://internal/handler/ota.go#L23-L133)
|
||||
- [internal/handler/ota.go:23-145](file://internal/handler/ota.go#L23-L145)
|
||||
- [internal/handler/device.go:27-83](file://internal/handler/device.go#L27-L83)
|
||||
- [internal/handler/share_code.go:40-125](file://internal/handler/share_code.go#L40-L125)
|
||||
- [internal/handler/share_code.go:192-211](file://internal/handler/share_code.go#L192-L211)
|
||||
@@ -1146,11 +1149,13 @@ Task_Share --> Redis
|
||||
- 对可空字段提供默认值策略,避免前端空值判断复杂化。
|
||||
- OTA模型支持复杂的升级策略,建议在业务层添加更多的参数验证。
|
||||
- 分享码模型支持多种设备型号,建议添加设备型号验证和限制。
|
||||
- **更新**:OTA模型简化后,减少了字段验证的复杂度,但仍需确保核心字段的完整性。
|
||||
- **版本管理与向后兼容**
|
||||
- 通过 API 版本号(如 /api/v1)隔离变更;新增字段采用可选策略,保持旧字段必填。
|
||||
- 对于破坏性变更,提供迁移脚本与双写策略。
|
||||
- OTA升级策略的变更需要谨慎处理,确保向后兼容性。
|
||||
- 分享码功能的新增不影响现有API,保持向前兼容。
|
||||
- **更新**:OTA模型的简化属于向后兼容的重构,不会影响现有API调用。
|
||||
- **性能优化**
|
||||
- 为高频查询字段建立索引;避免 SELECT *,仅选择必要字段。
|
||||
- 对大列表启用可选 Base64 编码;结合分页与缓存策略。
|
||||
@@ -1158,6 +1163,7 @@ Task_Share --> Redis
|
||||
- OTA查询使用复合索引,支持快速定位最新OTA记录。
|
||||
- 分享码使用Redis缓存,支持TTL自动过期和分布式锁。
|
||||
- 目标曲线使用Redis缓存,优化fr数据的独立存储。
|
||||
- **更新**:OTA查询现在使用简化的字段列表,减少了查询开销。
|
||||
- **错误处理与可观测性**
|
||||
- 统一错误码与消息格式;记录关键链路日志;对数据库与外部服务增加超时与重试。
|
||||
- OTA查询失败需要详细的日志记录,包括参数、查询结果等。
|
||||
@@ -1176,4 +1182,5 @@ Task_Share --> Redis
|
||||
- 添加数据库连接池监控,避免连接泄漏。
|
||||
- 添加任务调度监控,确保持久化任务正常执行。
|
||||
- 添加分布式锁监控,防止死锁和资源竞争。
|
||||
- 添加S3访问监控,确保CSV文件读取正常。
|
||||
- 添加S3访问监控,确保CSV文件读取正常。
|
||||
- **更新**:监控OTA表结构变化,确保简化的字段结构得到正确应用。
|
||||
Reference in New Issue
Block a user