52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
/**
|
||
* 双写模式工具
|
||
* Phase 2/3 启用
|
||
*
|
||
* 功能:新数据同时写入 Notion + persona-brain-db
|
||
* 确保数据一致性,支持从Notion主→persona-brain-db主的渐进切换
|
||
*/
|
||
|
||
/**
|
||
* 双写:同时写入Notion和persona-brain-db
|
||
* @param {string} table - 目标表名
|
||
* @param {object} data - 写入数据
|
||
* @param {object} options - 配置选项
|
||
*/
|
||
async function dualWrite(table, data, options = {}) {
|
||
const { notionClient, brainDbClient, primarySource = 'notion' } = options;
|
||
|
||
console.log(`📝 双写模式 [${primarySource}为主] → ${table}`);
|
||
|
||
const results = { notion: null, brainDb: null, errors: [] };
|
||
|
||
// 写入主数据源
|
||
try {
|
||
if (primarySource === 'notion') {
|
||
results.notion = await writeToNotion(notionClient, table, data);
|
||
results.brainDb = await writeToBrainDb(brainDbClient, table, data);
|
||
} else {
|
||
results.brainDb = await writeToBrainDb(brainDbClient, table, data);
|
||
results.notion = await writeToNotion(notionClient, table, data);
|
||
}
|
||
} catch (err) {
|
||
results.errors.push(err.message);
|
||
console.error(`❌ 双写失败: ${err.message}`);
|
||
}
|
||
|
||
return results;
|
||
}
|
||
|
||
async function writeToNotion(client, table, data) {
|
||
// Phase 2/3 实现
|
||
console.log(` → Notion写入 [${table}]: 占位`);
|
||
return { status: 'placeholder' };
|
||
}
|
||
|
||
async function writeToBrainDb(client, table, data) {
|
||
// Phase 2/3 实现
|
||
console.log(` → BrainDB写入 [${table}]: 占位`);
|
||
return { status: 'placeholder' };
|
||
}
|
||
|
||
module.exports = { dualWrite };
|