docs(结构约束同步): 活动文档路径对齐新目录结构

归类重构(技术约束-016)落地后同步活动文档旧路径:
- 数据存储设计.md: 三处对应实现表 12 处 src/component/* → storage/position/market/trades
- R-013 / PLAN-012 / 迭代11技术实现方案: SqliteStore/PositionManager 路径更新
- 迭代11程序结构设计: 补后续动作记录(历史档案按追加式原则不改写)
This commit is contained in:
2026-09-02 15:43:26 +08:00
parent a4902bb730
commit 6f74ed4a79
5 changed files with 27 additions and 18 deletions
@@ -31,7 +31,7 @@
``` ```
src/ src/
├── settings.js # strategySchema 扩展 configSchema + 归一化 ├── settings.js # strategySchema 扩展 configSchema + 归一化
├── component/SqliteStore.js # _ensureHoldingValuesColumn + readValues/writeValues ├── storage/SqliteStore.js # _ensureHoldingValuesColumn + readValues/writeValues
├── api/strategies.js # strategy-positions 附加 values + holdings/values-update 端点 ├── api/strategies.js # strategy-positions 附加 values + holdings/values-update 端点
├── client/views/SettingsSection.jsx # 「策略分组」子 tab 策略行展开配置字段 ├── client/views/SettingsSection.jsx # 「策略分组」子 tab 策略行展开配置字段
└── client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑 └── client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑
@@ -55,4 +55,4 @@ scripts/
- 同策略多行各有各的值;不同策略字段集互不影响; - 同策略多行各有各的值;不同策略字段集互不影响;
- 旧策略(无 configSchema)持仓行不出现字段区,现有操作(加仓/减仓/清仓/展开交易记录)不受影响; - 旧策略(无 configSchema)持仓行不出现字段区,现有操作(加仓/减仓/清仓/展开交易记录)不受影响;
- 服务端校验生效:数字填非数字、枚举填选项外拒绝并提示; - 服务端校验生效:数字填非数字、枚举填选项外拒绝并提示;
- typecheck + build 通过;回归脚本全绿。 - typecheck + build 通过;回归脚本全绿。
+12 -12
View File
@@ -135,10 +135,10 @@
| 模块 | 职责 | 文件 | | 模块 | 职责 | 文件 |
|---|---|---| |---|---|---|
| DataStore | 份额分配 + 行情持久化读写、迁移、schema | src/component/DataStore.js | | DataStore | 份额分配 + 行情持久化读写、迁移、schema | src/storage/DataStore.js |
| PositionManager | 份额业务逻辑(依赖 DataStore | src/component/PositionManager.js | | PositionManager | 份额业务逻辑(依赖 DataStore | src/position/PositionManager.js |
| MarketDataHub | 行情缓存(内存 + 磁盘持久化 + 查询) | src/component/MarketDataHub.js | | MarketDataHub | 行情缓存(内存 + 磁盘持久化 + 查询) | src/market/MarketDataHub.js |
| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime | src/component/MarketFeed.js | | MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime | src/market/MarketFeed.js |
## 8. 约束条目(引用) ## 8. 约束条目(引用)
@@ -254,11 +254,11 @@ CREATE TABLE IF NOT EXISTS market_quotes_cache (
| 模块 | 职责 | 文件 | | 模块 | 职责 | 文件 |
|---|---|---| |---|---|---|
| SqliteStore | SQLite 存储层封装(node:sqliteinit/迁移/持仓生命周期/行情读写/close) | src/component/SqliteStore.js | | SqliteStore | SQLite 存储层封装(node:sqliteinit/迁移/持仓生命周期/行情读写/close) | src/storage/SqliteStore.js |
| DataStore | 持仓 + 行情持久化(委托 SqliteStore,对外 API 升级为生命周期语义) | src/component/DataStore.js | | DataStore | 持仓 + 行情持久化(委托 SqliteStore,对外 API 升级为生命周期语义) | src/storage/DataStore.js |
| PositionManager | 份额业务(适配单票生命周期:openHolding/addShares/reduceShares/closeHolding | src/component/PositionManager.js | | PositionManager | 份额业务(适配单票生命周期:openHolding/addShares/reduceShares/closeHolding | src/position/PositionManager.js |
| MarketDataHub | 行情缓存(内存 + SQLite 持久化 + 查询) | src/component/MarketDataHub.js | | MarketDataHub | 行情缓存(内存 + SQLite 持久化 + 查询) | src/market/MarketDataHub.js |
| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime | src/component/MarketFeed.js | | MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime | src/market/MarketFeed.js |
| migrate 脚本 | 一次性迁移脚本 | scripts/migrate-json-to-sqlite.mjs | | migrate 脚本 | 一次性迁移脚本 | scripts/migrate-json-to-sqlite.mjs |
## 10. 交易记录存储设计(R-009 落实,2026-09-01 迭代 07 实施) ## 10. 交易记录存储设计(R-009 落实,2026-09-01 迭代 07 实施)
@@ -346,9 +346,9 @@ CREATE INDEX IF NOT EXISTS idx_trade_fills_date ON trade_fills (trade_date);
| 模块 | 职责 | 文件 | | 模块 | 职责 | 文件 |
|---|---|---| |---|---|---|
| SqliteStore | +trade_orders/trade_fills 建表 + 交易 UPSERT/历史查询 + 策略归属推导 | src/component/SqliteStore.js | | SqliteStore | +trade_orders/trade_fills 建表 + 交易 UPSERT/历史查询 + 策略归属推导 | src/storage/SqliteStore.js |
| DataStore | +交易记录方法(upsertTradeOrders/upsertTradeFills/queryTradeHistory | src/component/DataStore.js | | DataStore | +交易记录方法(upsertTradeOrders/upsertTradeFills/queryTradeHistory | src/storage/DataStore.js |
| TradeSync | 服务端定时同步(启动预热 + 60s + UPSERT 幂等) | src/component/TradeSync.js | | TradeSync | 服务端定时同步(启动预热 + 60s + UPSERT 幂等) | src/trades/TradeSync.js |
| api/trades.js | +trades/history 端点 | src/api/trades.js | | api/trades.js | +trades/history 端点 | src/api/trades.js |
## 11. 约束条目(引用) ## 11. 约束条目(引用)
@@ -25,7 +25,7 @@ strategies: z.array(z.object({
- addStrategy 返回值默认带 configSchema: []renameStrategy / updateStrategies 整表更新天然携带; - addStrategy 返回值默认带 configSchema: []renameStrategy / updateStrategies 整表更新天然携带;
- 兼容:settings 旧数据({id,name})经 schemastery default/union 归一化,无迁移脚本。 - 兼容:settings 旧数据({id,name})经 schemastery default/union 归一化,无迁移脚本。
### 1.2 strategy_holdings 新增 values 列 + 读写(src/component/SqliteStore.js ### 1.2 strategy_holdings 新增 values 列 + 读写(src/storage/SqliteStore.js
```js ```js
// init() 内补列(幂等,沿用 _ensureTradeAttributionColumns 模式;只读连接容忍) // init() 内补列(幂等,沿用 _ensureTradeAttributionColumns 模式;只读连接容忍)
@@ -52,7 +52,7 @@ case 'holdings/values-update':
``` ```
```js ```js
// PositionManager.updateHoldingValues(holdingId, values) // src/position/PositionManager.js —— updateHoldingValues(holdingId, values)
// 1) 定位 holdings 行(须存在且当前持仓 closed_at IS NULL;否则 404 // 1) 定位 holdings 行(须存在且当前持仓 closed_at IS NULL;否则 404
// 2) 服务端校验(按所属策略 configSchema): // 2) 服务端校验(按所属策略 configSchema):
// number → Number.isFinite(Number(v))enum → enum.includes(v)boolean → typeof v === 'boolean' // number → Number.isFinite(Number(v))enum → enum.includes(v)boolean → typeof v === 'boolean'
@@ -86,4 +86,4 @@ case 'holdings/values-update':
## 6. 验证 ## 6. 验证
- build + typecheck 通过; - build + typecheck 通过;
- 老师人工验收(见验收标准)。 - 老师人工验收(见验收标准)。
@@ -64,3 +64,12 @@ src/client/views/SettingsSection.jsx # 「策略分组」策略行展开配置
src/client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑 src/client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑
scripts/test-r013-custom-fields.mjs # 回归脚本(独立数据目录) scripts/test-r013-custom-fields.mjs # 回归脚本(独立数据目录)
``` ```
## 后续动作(2026-09-02 结构约束对齐)
归类重构落地后,将活动文档中的旧路径引用同步到新结构(历史档案按追加式原则不改写):
- docs/03-设计约束/数据存储设计.md:三处「对应实现」表 12 处 src/component/* → 新域目录(storage/position/market/trades);
- docs/05-需求池/R-013.md:涉及改动面 SqliteStore → src/storage/
- docs/02-计划/计划-策略自定义字段配置.md:文件树 → storage/SqliteStore.js
- 本迭代技术实现方案:1.2 节标题路径 + §2 PositionManager 路径标注 → 新目录;
- 保留不改:迭代 04 说明/复盘、R-008 归档、旧计划中的 component/ 描述(历史事实)。
+1 -1
View File
@@ -177,7 +177,7 @@ function validateField(f, v) {
## 涉及改动面(技术方案,定稿) ## 涉及改动面(技术方案,定稿)
1. **src/settings.js**strategySchema 的 strategies 项扩展 configSchemaschemastery array of objecttype union text|number|boolean|enum);读取归一化(旧项缺省 []);strategies/update 沿用整表更新语义。 1. **src/settings.js**strategySchema 的 strategies 项扩展 configSchemaschemastery array of objecttype union text|number|boolean|enum);读取归一化(旧项缺省 []);strategies/update 沿用整表更新语义。
2. **src/component/SqliteStore.js**init() 增加 _ensureHoldingValuesColumnPRAGMA table_info → ALTER,幂等,只读容忍同 trade_orders 先例);openHolding / addShares / reduceShares / closeHolding 保持既有列行为(values 不随份额操作变动);新增 readValues(holdingId) / writeValues(holdingId, values)。 2. **src/storage/SqliteStore.js**init() 增加 _ensureHoldingValuesColumnPRAGMA table_info → ALTER,幂等,只读容忍同 trade_orders 先例);openHolding / addShares / reduceShares / closeHolding 保持既有列行为(values 不随份额操作变动);新增 readValues(holdingId) / writeValues(holdingId, values)。
3. **src/api/strategies.js**strategy-positions 返回项附加 values;新增端点 holdings/values-update {holdingId, values} 写回;strategies/update 已可携带 configSchema(整表更新天然支持)。 3. **src/api/strategies.js**strategy-positions 返回项附加 values;新增端点 holdings/values-update {holdingId, values} 写回;strategies/update 已可携带 configSchema(整表更新天然支持)。
4. **src/client/views/SettingsSection.jsx**:「策略分组」子 tab 策略行加展开手柄:展开区 = 字段列表(label/key/type/enum/def+ 添加/删除/编辑字段表单;保存走 strategies/update。 4. **src/client/views/SettingsSection.jsx**:「策略分组」子 tab 策略行加展开手柄:展开区 = 字段列表(label/key/type/enum/def+ 添加/删除/编辑字段表单;保存走 strategies/update。
5. **src/client/views/StrategyTab.jsx**:持仓行展开区(R-010 基础)增加「自定义字段」区块:按该策略 configSchema 渲染输入控件(文本/数字/布尔/枚举),值来自该行 values,编辑保存调 values-update;行内表格可选加字段列。 5. **src/client/views/StrategyTab.jsx**:持仓行展开区(R-010 基础)增加「自定义字段」区块:按该策略 configSchema 渲染输入控件(文本/数字/布尔/枚举),值来自该行 values,编辑保存调 values-update;行内表格可选加字段列。