/** * 一次性迁移:把本地 data/heroes.json、data/templates.json 导入线上 MongoDB * 用法:配置 MONGO_URL 后执行 node scripts/migrate-to-mongo.js * 已在库中的数据会按 uuid 幂等覆盖,可重复执行。 */ import fs from 'node:fs' import path from 'node:path' import url from 'node:url' import { saveHeroes, saveTemplates, getHeroes } from '../db.js' const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) const DATA_DIR = path.join(__dirname, '..', 'data') const readJson = (file, fallback) => { const p = path.join(DATA_DIR, file) return fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, 'utf8')) : fallback } const heroes = readJson('heroes.json', { heroes: [] }).heroes || [] const tpl = readJson('templates.json', { triggerPresets: [], fieldPresets: [] }) if (heroes.length) { await saveHeroes(heroes) console.log(`[migrate] heroes 导入 ${heroes.length} 条`) } else { console.log('[migrate] 无本地 heroes.json 或为空,跳过英雄导入') } if ((tpl.triggerPresets?.length || 0) + (tpl.fieldPresets?.length || 0) > 0) { await saveTemplates(tpl.triggerPresets || [], tpl.fieldPresets || []) console.log(`[migrate] templates 导入 trigger=${tpl.triggerPresets?.length || 0} field=${tpl.fieldPresets?.length || 0}`) } else { console.log('[migrate] 无本地 templates.json 或为空,跳过预设导入') } console.log(`[migrate] 库中现有英雄 ${(await getHeroes()).length} 条`) process.exit(0)