95 lines
3.7 KiB
JavaScript
95 lines
3.7 KiB
JavaScript
#!/usr/bin/env node
|
||
|
||
/**
|
||
* 修复分类重复问题
|
||
* 1. 删除"用户身份标签"分类及其所有标签和关系
|
||
* 2. 把"家庭角色"移到第一个位置
|
||
* 3. 调整其他分类的sort_order
|
||
*/
|
||
|
||
const Database = require('better-sqlite3');
|
||
const path = require('path');
|
||
|
||
const dbPath = path.join(__dirname, '../dmp_onion.db');
|
||
const db = new Database(dbPath);
|
||
|
||
console.log('\n╔════════════════════════════════════════════════════════════════╗');
|
||
console.log('║ 🔧 修复分类重复问题 ║');
|
||
console.log('╚════════════════════════════════════════════════════════════════╝\n');
|
||
|
||
try {
|
||
// 1. 获取用户身份标签的所有标签ID
|
||
console.log('1️⃣ 获取\"用户身份标签\"的所有标签...');
|
||
const tagIds = db.prepare('SELECT id FROM tags WHERE category_id = 33').all();
|
||
console.log(` 找到 ${tagIds.length} 个标签`);
|
||
|
||
// 2. 删除相关的user_tags关系
|
||
console.log('\n2️⃣ 删除user_tags关系...');
|
||
const stmt = db.prepare('DELETE FROM user_tags WHERE tag_id = ?');
|
||
let relDeleted = 0;
|
||
for (const tag of tagIds) {
|
||
const result = stmt.run(tag.id);
|
||
relDeleted += result.changes;
|
||
}
|
||
console.log(` 删除了 ${relDeleted} 条关系`);
|
||
|
||
// 3. 删除tags
|
||
console.log('\n3️⃣ 删除标签...');
|
||
const tagDeleteResult = db.prepare('DELETE FROM tags WHERE category_id = 33').run();
|
||
console.log(` 删除了 ${tagDeleteResult.changes} 个标签`);
|
||
|
||
// 4. 删除分类
|
||
console.log('\n4️⃣ 删除分类...');
|
||
const catDeleteResult = db.prepare('DELETE FROM tag_categories WHERE id = 33').run();
|
||
console.log(` 删除了 ${catDeleteResult.changes} 个分类`);
|
||
|
||
// 5. 更新家庭角色的sort_order到0
|
||
console.log('\n5️⃣ 更新\"家庭角色\"的位置...');
|
||
db.prepare('UPDATE tag_categories SET sort_order = 0 WHERE id = 46').run();
|
||
console.log(' ✓ 家庭角色现在排在第一位');
|
||
|
||
// 6. 重新调整其他分类的sort_order
|
||
console.log('\n6️⃣ 重新调整其他分类的顺序...');
|
||
const categories = db.prepare('SELECT id, key, name, sort_order FROM tag_categories ORDER BY sort_order').all();
|
||
|
||
let newOrder = 0;
|
||
for (const cat of categories) {
|
||
if (cat.id === 46) continue; // 家庭角色已经是0
|
||
if (cat.sort_order !== newOrder) {
|
||
db.prepare('UPDATE tag_categories SET sort_order = ? WHERE id = ?').run(newOrder, cat.id);
|
||
}
|
||
newOrder++;
|
||
}
|
||
console.log(` ✓ 调整了 ${newOrder} 个分类`);
|
||
|
||
// 7. 显示最终结果
|
||
console.log('\n7️⃣ 最终分类列表:');
|
||
const finalCats = db.prepare('SELECT id, key, name, sort_order FROM tag_categories ORDER BY sort_order').all();
|
||
for (const cat of finalCats) {
|
||
console.log(` ${cat.sort_order + 1}. ${cat.name} (ID:${cat.id})`);
|
||
}
|
||
|
||
// 8. 统计数据
|
||
console.log('\n📊 数据统计:');
|
||
const stats = db.prepare(`
|
||
SELECT
|
||
(SELECT COUNT(*) FROM users) as 总用户,
|
||
(SELECT COUNT(*) FROM tags) as 总标签,
|
||
(SELECT COUNT(*) FROM tag_categories) as 分类数,
|
||
(SELECT COUNT(*) FROM user_tags) as 总关系
|
||
`).get();
|
||
|
||
console.log(` • 总用户: ${stats.总用户}`);
|
||
console.log(` • 总标签: ${stats.总标签}`);
|
||
console.log(` • 分类数: ${stats.分类数} (从16减少到15)`);
|
||
console.log(` • 总关系: ${stats.总关系}`);
|
||
|
||
console.log('\n✅ 修复完成!\n');
|
||
|
||
} catch (e) {
|
||
console.error('❌ 错误:', e.message);
|
||
process.exit(1);
|
||
} finally {
|
||
db.close();
|
||
}
|