Files
onion-dmp/scripts/fix-duplicate-category.js
2026-04-08 14:52:09 +08:00

95 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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();
}