feat(R-013+重构): 策略自定义字段需求文档 + 结构归类优化
需求与文档: - R-013 策略自定义字段配置(定义随策略 configSchema 存 settings、值落 strategy_holdings.values JSON、类型化文本/数字/布尔/枚举)定稿并进入 PLAN-012 / 迭代 11(含目标数据模型 + 端到端示例 + 技术方案 + 验收标准) - R-011(Tab设置)/ R-012(UI主题适配)归档至 已完成/,索引标记已归档 - 沉淀约束: 产品约束-010 / 技术约束-015 / 技术约束-016 / UI约束-005 结构重构(技术约束-016): - src/component/ 平铺还原为语义分域目录: data-source/ storage/ position/ market/ trades/(git rename 保留历史) - 清理死代码: 删除 AllocationStorage.js(0 引用)、DataStore setDataset/removeDataset(无调用方) - 同步更新 src/index.js / scripts/*.mjs / tsdown.config.ts 引用 - typecheck + build + test-r009 回归 14/14 通过
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
* 5. 迁移前备份 JSON 为 *.bak;迁移失败不破坏原文件。
|
||||
*/
|
||||
|
||||
import { SqliteStore } from '../lib/component/SqliteStore.js';
|
||||
import { SqliteStore } from '../lib/storage/SqliteStore.js';
|
||||
|
||||
async function main() {
|
||||
const store = new SqliteStore({}); // dataDir 默认 ~/.dsh/one-divine-lot,或 ODL_TEST_DATA_DIR
|
||||
@@ -41,4 +41,4 @@ async function main() {
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
main();
|
||||
@@ -5,7 +5,7 @@
|
||||
import { mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { DataStore } from '../src/component/DataStore.js';
|
||||
import { DataStore } from '../src/storage/DataStore.js';
|
||||
import { handleTrade, TRADE_METHODS } from '../src/api/trades.js';
|
||||
|
||||
const dir = mkdtempSync(join(tmpdir(), 'odl-api-test-'));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { QmtBridgeRestDataSource } from '../src/component/QmtBridgeRestDataSource.js';
|
||||
import { QmtBridgeRestDataSource } from '../src/data-source/QmtBridgeRestDataSource.js';
|
||||
const ds = new QmtBridgeRestDataSource({ baseUrl: 'http://x' });
|
||||
|
||||
let pass = 0, fail = 0;
|
||||
@@ -38,4 +38,4 @@ assert(t.code === '001330.SZ', 'mapTrade code 归一化: ' + t.code);
|
||||
assert(t.tradeDate === '20260901', 'mapTrade tradeDate 保留: ' + t.tradeDate);
|
||||
|
||||
console.log('\n结果: ' + pass + ' 通过, ' + fail + ' 失败');
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
@@ -5,8 +5,8 @@
|
||||
import { mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { DataStore } from '../src/component/DataStore.js';
|
||||
import { TradeSync } from '../src/component/TradeSync.js';
|
||||
import { DataStore } from '../src/storage/DataStore.js';
|
||||
import { TradeSync } from '../src/trades/TradeSync.js';
|
||||
|
||||
const dir = mkdtempSync(join(tmpdir(), 'odl-test-r009-sync-v2-'));
|
||||
process.env.ODL_TEST_DATA_DIR = dir;
|
||||
@@ -83,4 +83,4 @@ assert(fillsManual.length === 1 && fillsManual[0].tradeId === 'T-S1', '成交按
|
||||
storage.close();
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
console.log('\n结果: ' + pass + ' 通过, ' + fail + ' 失败');
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
@@ -12,7 +12,7 @@
|
||||
import { mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { SqliteStore } from '../src/component/SqliteStore.js';
|
||||
import { SqliteStore } from '../src/storage/SqliteStore.js';
|
||||
|
||||
const dir = mkdtempSync(join(tmpdir(), 'odl-test-r009-v2-'));
|
||||
process.env.ODL_TEST_DATA_DIR = dir;
|
||||
@@ -98,4 +98,4 @@ assert(all.length === 2 && all.find(o => o.orderId === 'O-001').strategyId === '
|
||||
store.close();
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
console.log('\n结果: ' + pass + ' 通过, ' + fail + ' 失败');
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
@@ -2,7 +2,7 @@
|
||||
* 真实库归属闭环验证(写操作测试):设置归属 → 过滤 → UPSERT 保留 → 还原
|
||||
* 注意:插件进程持锁时外部写会失败;若失败说明插件在运行(正常),跳过写操作
|
||||
*/
|
||||
import { DataStore } from '../src/component/DataStore.js';
|
||||
import { DataStore } from '../src/storage/DataStore.js';
|
||||
|
||||
const storage = new DataStore({ dataDir: process.env.HOME + '/.dsh/one-divine-lot' });
|
||||
await storage._ensure();
|
||||
@@ -45,4 +45,4 @@ try {
|
||||
|
||||
storage.close();
|
||||
console.log('\n结果: ' + pass + ' 通过, ' + fail + ' 失败');
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
process.exit(fail > 0 ? 1 : 0);
|
||||
@@ -3,7 +3,7 @@
|
||||
* 手动归属模型:验证归属列(若已迁移)、历史查询、候选列表
|
||||
* 注:归属列 ALTER 迁移由插件重启后自动执行(当前运行中的旧构建未含迁移逻辑)
|
||||
*/
|
||||
import { DataStore } from '../src/component/DataStore.js';
|
||||
import { DataStore } from '../src/storage/DataStore.js';
|
||||
|
||||
const storage = new DataStore({ dataDir: process.env.HOME + '/.dsh/one-divine-lot' });
|
||||
await storage._ensure();
|
||||
|
||||
Reference in New Issue
Block a user