diff --git a/docs/02-计划/计划-策略自定义字段配置.md b/docs/02-计划/计划-策略自定义字段配置.md index 1c83a5a..2f7125c 100644 --- a/docs/02-计划/计划-策略自定义字段配置.md +++ b/docs/02-计划/计划-策略自定义字段配置.md @@ -31,7 +31,7 @@ ``` src/ ├── 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 端点 ├── client/views/SettingsSection.jsx # 「策略分组」子 tab 策略行展开配置字段 └── client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑 @@ -55,4 +55,4 @@ scripts/ - 同策略多行各有各的值;不同策略字段集互不影响; - 旧策略(无 configSchema)持仓行不出现字段区,现有操作(加仓/减仓/清仓/展开交易记录)不受影响; - 服务端校验生效:数字填非数字、枚举填选项外拒绝并提示; -- typecheck + build 通过;回归脚本全绿。 +- typecheck + build 通过;回归脚本全绿。 \ No newline at end of file diff --git a/docs/03-设计约束/数据存储设计.md b/docs/03-设计约束/数据存储设计.md index a629f72..f6bdb89 100644 --- a/docs/03-设计约束/数据存储设计.md +++ b/docs/03-设计约束/数据存储设计.md @@ -135,10 +135,10 @@ | 模块 | 职责 | 文件 | |---|---|---| -| DataStore | 份额分配 + 行情持久化读写、迁移、schema | src/component/DataStore.js | -| PositionManager | 份额业务逻辑(依赖 DataStore) | src/component/PositionManager.js | -| MarketDataHub | 行情缓存(内存 + 磁盘持久化 + 查询) | src/component/MarketDataHub.js | -| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime) | src/component/MarketFeed.js | +| DataStore | 份额分配 + 行情持久化读写、迁移、schema | src/storage/DataStore.js | +| PositionManager | 份额业务逻辑(依赖 DataStore) | src/position/PositionManager.js | +| MarketDataHub | 行情缓存(内存 + 磁盘持久化 + 查询) | src/market/MarketDataHub.js | +| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime) | src/market/MarketFeed.js | ## 8. 约束条目(引用) @@ -254,11 +254,11 @@ CREATE TABLE IF NOT EXISTS market_quotes_cache ( | 模块 | 职责 | 文件 | |---|---|---| -| SqliteStore | SQLite 存储层封装(node:sqlite:init/迁移/持仓生命周期/行情读写/close) | src/component/SqliteStore.js | -| DataStore | 持仓 + 行情持久化(委托 SqliteStore,对外 API 升级为生命周期语义) | src/component/DataStore.js | -| PositionManager | 份额业务(适配单票生命周期:openHolding/addShares/reduceShares/closeHolding) | src/component/PositionManager.js | -| MarketDataHub | 行情缓存(内存 + SQLite 持久化 + 查询) | src/component/MarketDataHub.js | -| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime) | src/component/MarketFeed.js | +| SqliteStore | SQLite 存储层封装(node:sqlite:init/迁移/持仓生命周期/行情读写/close) | src/storage/SqliteStore.js | +| DataStore | 持仓 + 行情持久化(委托 SqliteStore,对外 API 升级为生命周期语义) | src/storage/DataStore.js | +| PositionManager | 份额业务(适配单票生命周期:openHolding/addShares/reduceShares/closeHolding) | src/position/PositionManager.js | +| MarketDataHub | 行情缓存(内存 + SQLite 持久化 + 查询) | src/market/MarketDataHub.js | +| MarketFeed | 行情获取(WS + REST 定时刷新 + 启动 prime) | src/market/MarketFeed.js | | migrate 脚本 | 一次性迁移脚本 | scripts/migrate-json-to-sqlite.mjs | ## 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 | -| DataStore | +交易记录方法(upsertTradeOrders/upsertTradeFills/queryTradeHistory) | src/component/DataStore.js | -| TradeSync | 服务端定时同步(启动预热 + 60s + UPSERT 幂等) | src/component/TradeSync.js | +| SqliteStore | +trade_orders/trade_fills 建表 + 交易 UPSERT/历史查询 + 策略归属推导 | src/storage/SqliteStore.js | +| DataStore | +交易记录方法(upsertTradeOrders/upsertTradeFills/queryTradeHistory) | src/storage/DataStore.js | +| TradeSync | 服务端定时同步(启动预热 + 60s + UPSERT 幂等) | src/trades/TradeSync.js | | api/trades.js | +trades/history 端点 | src/api/trades.js | ## 11. 约束条目(引用) diff --git a/docs/04-迭代记录/11-策略自定义字段配置/技术实现方案.md b/docs/04-迭代记录/11-策略自定义字段配置/技术实现方案.md index 3831da0..77874ec 100644 --- a/docs/04-迭代记录/11-策略自定义字段配置/技术实现方案.md +++ b/docs/04-迭代记录/11-策略自定义字段配置/技术实现方案.md @@ -25,7 +25,7 @@ strategies: z.array(z.object({ - addStrategy 返回值默认带 configSchema: [];renameStrategy / updateStrategies 整表更新天然携带; - 兼容: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 // init() 内补列(幂等,沿用 _ensureTradeAttributionColumns 模式;只读连接容忍) @@ -52,7 +52,7 @@ case 'holdings/values-update': ``` ```js -// PositionManager.updateHoldingValues(holdingId, values): +// src/position/PositionManager.js —— updateHoldingValues(holdingId, values): // 1) 定位 holdings 行(须存在且当前持仓 closed_at IS NULL;否则 404) // 2) 服务端校验(按所属策略 configSchema): // number → Number.isFinite(Number(v));enum → enum.includes(v);boolean → typeof v === 'boolean' @@ -86,4 +86,4 @@ case 'holdings/values-update': ## 6. 验证 - build + typecheck 通过; -- 老师人工验收(见验收标准)。 +- 老师人工验收(见验收标准)。 \ No newline at end of file diff --git a/docs/04-迭代记录/11-策略自定义字段配置/程序结构设计.md b/docs/04-迭代记录/11-策略自定义字段配置/程序结构设计.md index 0b4b2c0..9223e12 100644 --- a/docs/04-迭代记录/11-策略自定义字段配置/程序结构设计.md +++ b/docs/04-迭代记录/11-策略自定义字段配置/程序结构设计.md @@ -64,3 +64,12 @@ src/client/views/SettingsSection.jsx # 「策略分组」策略行展开配置 src/client/views/StrategyTab.jsx # 持仓行展开区「自定义字段」编辑 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/ 描述(历史事实)。 diff --git a/docs/05-需求池/R-013.md b/docs/05-需求池/R-013.md index 9153603..e140384 100644 --- a/docs/05-需求池/R-013.md +++ b/docs/05-需求池/R-013.md @@ -177,7 +177,7 @@ function validateField(f, v) { ## 涉及改动面(技术方案,定稿) 1. **src/settings.js**:strategySchema 的 strategies 项扩展 configSchema(schemastery array of object,type union text|number|boolean|enum);读取归一化(旧项缺省 []);strategies/update 沿用整表更新语义。 -2. **src/component/SqliteStore.js**:init() 增加 _ensureHoldingValuesColumn(PRAGMA table_info → ALTER,幂等,只读容忍同 trade_orders 先例);openHolding / addShares / reduceShares / closeHolding 保持既有列行为(values 不随份额操作变动);新增 readValues(holdingId) / writeValues(holdingId, values)。 +2. **src/storage/SqliteStore.js**:init() 增加 _ensureHoldingValuesColumn(PRAGMA 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(整表更新天然支持)。 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;行内表格可选加字段列。