chore: release v1.0.31
Deploy / build-linux-web (push) Successful in 51s
Deploy / build-macos (push) Successful in 1m25s
Deploy / build-android (push) Failing after 4m56s
Deploy / build-windows (push) Failing after 9m7s
Deploy / build-ios (push) Has been skipped
Deploy / release-deploy (push) Has been skipped
Deploy / build-linux-web (push) Successful in 51s
Deploy / build-macos (push) Successful in 1m25s
Deploy / build-android (push) Failing after 4m56s
Deploy / build-windows (push) Failing after 9m7s
Deploy / build-ios (push) Has been skipped
Deploy / release-deploy (push) Has been skipped
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+184
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "酒库管理系统 — 项目 TODO",
|
||||
"updated_at": "2026-06-10T14:56:28.055Z"
|
||||
"updated_at": "2026-06-10T15:32:03.641Z"
|
||||
},
|
||||
"seq": 28,
|
||||
"seq": 40,
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
@@ -467,6 +467,188 @@
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"title": "修复库存扣减 TOCTOU 竞态:SUM 预检纳入事务且在 FOR UPDATE 加锁后执行",
|
||||
"desc": "stock.go ApproveStockOut 中库存总量 SUM 在 FOR UPDATE 加锁前执行,存在 check-then-act 窗口,高并发下可超扣。需将预检 SUM 也放入事务并在加锁后执行",
|
||||
"level": "high",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:13.249Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"title": "统一 handler Update 改用白名单字段更新,防止 GORM Save() 跨租户覆盖",
|
||||
"desc": "partner.go/product_attr.go/warehouse.go 等多处用 db.Save(&object) 更新全字段,若中间件被绕过会造成 shop_id 被覆盖。改为 db.Model(&x).Where(\"id=? AND shop_id=?\").Updates(fields) 白名单模式",
|
||||
"level": "high",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:15.102Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"title": "添加库存与财务流水定期对账检查,防止事务中断导致不平账",
|
||||
"desc": "出库审批若 DB 断连,Rollback 后库存正确但财务记录可能未落地。需添加对账脚本:SUM(InventoryLog.quantity by direction) == SUM(Inventories.quantity),及告警机制",
|
||||
"level": "high",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:16.854Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"title": "迁移 License 激活逻辑到 license_devices 表,废弃 licenses.device_id 字段",
|
||||
"desc": "licenses.device_id 已标记 deprecated 但激活/解绑逻辑仍在使用它,license_devices 表未被完整采用。需将 Activate/Deactivate 逻辑迁移至 license_devices,并写数据迁移脚本",
|
||||
"level": "mid",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端",
|
||||
"数据库"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:25.715Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"title": "将 checkInventory 业务逻辑从 StockOutHandler 移到 Service 层",
|
||||
"desc": "checkInventory 实现在 handler/stock_out.go 中而非 service 层,导致单元测试困难、逻辑无法复用。应移至 StockService 或 InventoryService",
|
||||
"level": "mid",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:28.106Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"title": "统一后端 API 错误响应格式为 {code, message},创建 util/response.go",
|
||||
"desc": "各 handler 返回格式不一致:有的 {error: err.Error()},有的 {error: 硬编码字符串},有的直接 struct。前端解析困难。需定义 ErrorResponse struct 和 RespondError/RespondSuccess 辅助函数统一调用",
|
||||
"level": "mid",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:33.596Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"title": "生产环境 CORS 强制校验:非 debug 模式禁止 Origin=*",
|
||||
"desc": "config.go 默认 CORSOrigin=\"*\",注释提示生产需改但无代码强制。应在 main.go 中添加:server.mode!=debug 且 CORSOrigin==\"*\" 时 log.Fatal 拒绝启动",
|
||||
"level": "mid",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:44.159Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"title": "License 私钥未配置时改为 Fatal 而非静默跳过",
|
||||
"desc": "license.go 中私钥未配置只打 log 并跳过,导致授权功能失效但程序正常运行。应改为 log.Fatal,确保运维人员知晓配置缺失",
|
||||
"level": "mid",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:46.792Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"title": "统一各 handler 的 pageSize 上限校验,创建 util.ValidatePageSize()",
|
||||
"desc": "inventory.go 限制 pageSize 最大 500,其他 handler 无此限制,前端可传 pageSize=10000 打满 DB。创建 util.ValidatePageSize(n) 统一处理",
|
||||
"level": "mid",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:49.032Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"title": "将拼音回填从启动逻辑改为一次性迁移脚本",
|
||||
"desc": "main.go 每次启动执行 backfillPinyin 全表扫描,数据量大后拖慢启动。改为 go run ./cmd/migrate-pinyin 一次性迁移,后续新数据靠写入时自动生成",
|
||||
"level": "low",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:31:57.979Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"title": "DB 连接池参数(MaxIdleConns/MaxOpenConns)改为可配置项",
|
||||
"desc": "main.go 中硬编码 MaxIdleConns=10, MaxOpenConns=100,无法运维调优。改为读取 config(viper),并在文档中说明推荐值",
|
||||
"level": "low",
|
||||
"tier": 3,
|
||||
"tags": [
|
||||
"后端"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:32:00.233Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"title": "明确 Inventories 反范式字段语义:是当前值还是入库快照",
|
||||
"desc": "inventories 表存了 product_name/warehouse_name/supplier_name 等,既可能是冗余(与 products JOIN 重复),也可能是历史快照(入库时锁定)。需明确语义并在 model 注释中说明;若是快照,应只在写入时固定,不随主表变化",
|
||||
"level": "low",
|
||||
"tier": 2,
|
||||
"tags": [
|
||||
"后端",
|
||||
"数据库"
|
||||
],
|
||||
"status": "open",
|
||||
"created_at": "2026-06-10T15:32:03.641Z",
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user