dd98b4d45b
- 新增 02-计划/计划-数据存储SQLite.md(PLAN-007) - 新增 04-迭代记录/06-数据存储SQLite/ 五份文档(迭代目标/技术实现方案/验收标准/UI交互调用分析/迭代复盘) - 归档 R-008 至 已完成/(含归档头 + 讨论记录索引),索引更新为已实现(已归档) - 设计约束更新:技术方案约束-012 标注 SQLite 变更、数据存储设计.md 第 9 节变更预告 - 需求池说明.md 新增「归档与转正规范」;迭代记录说明.md 新增「实现经验沉淀」 - 验收标准修正 db 文件名笔误(one-divine-lot.db → store.db)
2.8 KiB
2.8 KiB
验收标准:06-数据存储SQLite(JSON → SQLite)
验收标准线
- 存储介质切换:数据落 SQLite(store.db),不再生成/更新 store.json / store.market.json / store.schema.json(迁移前备份除外);
- 两表结构:strategy_holdings + market_quotes_cache 两表存在且结构符合技术实现方案(strategy_holdings 持仓生命周期表:holding_id 自增 + strategy_id/code/shares/created_at/closed_at;market_quotes_cache 仅 last_price/last_close 两列,无 JSON 列);
- 持仓生命周期正确:openHolding/addShares/reduceShares/closeHolding 操作正确 —— 建仓生成 holding_id+created_at、加/减仓更新当前持仓 shares、清仓 closed_at 置位转历史;同策略同股票仅一笔当前持仓(部分唯一索引);删除策略/一键清零改为软关闭(历史保留);
- 行情不回归:行情缓存查询/写回不变 —— 启动首屏有价(从 SQLite 加载)、盘中防抖写回、三级命中(内存→SQLite→REST 补拉)行为一致;
- 自动迁移正确:旧 JSON(store.json / store.market.json / 旧 allocations.json 若存在)→ SQLite 数据一致(份额逐条核对、行情快照逐条核对),迁移前备份文件(*.json.bak)留存;
- 幂等:重复启动不重复迁移(SQLite 有数据即跳过);迁移失败不破坏原 JSON;
- JSON 废弃:迁移成功后 store.json / store.market.json 不再读写(旧文件保留为备份,新数据只写 SQLite);
- 策略定义位置:策略(id/name/visible/order)仍存 DSH settings,设置页交互不变;
- 不回归:持仓/策略/行情/连接配置/交易记录等现有功能正常;
- 测试隔离:回归测试在独立数据目录(ODL_TEST_DATA_DIR)执行,真实数据目录无写操作(技术约束-011)。
验收方法
- 独立数据目录(ODL_TEST_DATA_DIR)构造旧 JSON 数据(store.json / store.market.json)→ 启动插件 → 确认自动迁移完成、SQLite 数据与 JSON 一致、备份文件留存;
- 反复重启确认幂等(不重复迁移、数据不丢);
- 通过 API 验证份额 CRUD 与行情读写行为与改造前一致(对照迭代 04/05 回归);
- 手动核对真实数据目录:迁移后 store.json / store.market.json 不再更新,store.db 为数据源;
- 回归:全部持仓 / 策略 / 行情 / QMT 连接配置 / 交易记录正常。
验收目标
- 存储引擎替换闭环:JSON → SQLite(迁移正确 + 幂等 + 备份),对外行为零变化;
- 为复杂查询/多数据集统一存储铺路(strategy_holdings 持仓生命周期表 + market_quotes_cache 就绪,holding_id 可作为 trades 关联锚点,trades 表 R-007 再建);
- 设计约束同步落地:技术约束-012 与数据存储设计.md 更新为 SQLite 设计。