feat: 持久化从 JSON 迁移到 DuckDB,启动自动迁移存量数据并全面异步化
build-and-deploy / build-and-deploy (push) Successful in 37s
build-and-deploy / build-and-deploy (push) Successful in 37s
- 新增 src/persistence/duckdbAdapter:与 jsonAdapter 同接口的异步适配器, 数据存于 data/registry.duckdb,首次启动自动从 JSON 迁移并备份 json-backup-<ts> - 全部服务层(project/config/user/token)与路由改为 async/await - MCP 工具与鉴权同步异步化,系统 mode 读写迁移至 DuckDB - 服务启动流程:init DB -> 自动迁移 -> 确保默认管理员 -> listen - 新增 DuckDB 往返/迁移测试,测试目录隔离 REGISTRY_DATA_DIR
This commit is contained in:
+19
-9
@@ -5,22 +5,32 @@
|
||||
*/
|
||||
const test = require("node:test");
|
||||
const assert = require("node:assert");
|
||||
const fs = require("node:fs");
|
||||
const os = require("node:os");
|
||||
const path = require("node:path");
|
||||
const { createMcpServer } = require("../src/mcp/tools");
|
||||
const { loadSystem, saveSystem } = require("../src/persistence/jsonAdapter");
|
||||
const { init, loadSystem, saveSystem } = require("../src/persistence/duckdbAdapter");
|
||||
|
||||
// 恢复测试前的系统模式,避免影响其他用例
|
||||
const originalMode = (loadSystem() || {}).mode || "edit";
|
||||
test.after(() => {
|
||||
const system = loadSystem() || {};
|
||||
system.mode = originalMode;
|
||||
saveSystem(system);
|
||||
});
|
||||
// 使用临时数据目录,避免污染真实 data/
|
||||
const tmpDataDir = fs.mkdtempSync(path.join(os.tmpdir(), "registry-mcp-test-"));
|
||||
process.env.REGISTRY_DATA_DIR = tmpDataDir;
|
||||
|
||||
let server;
|
||||
test.before(() => {
|
||||
let originalMode = "edit";
|
||||
|
||||
// 初始化 DuckDB,记录测试前模式;测试结束后恢复原模式
|
||||
test.before(async () => {
|
||||
await init();
|
||||
originalMode = (await loadSystem() || {}).mode || "edit";
|
||||
server = createMcpServer();
|
||||
});
|
||||
|
||||
test.after(async () => {
|
||||
const system = await loadSystem() || {};
|
||||
system.mode = originalMode;
|
||||
await saveSystem(system);
|
||||
});
|
||||
|
||||
/**
|
||||
* 直接调用已注册工具的处理函数
|
||||
* @param {string} name - 工具名
|
||||
|
||||
Reference in New Issue
Block a user