import prisma from '../src/utils/prisma'; import { generateUniqueDigitalId } from '../src/utils/digitalIdGenerator'; /** * 为现有用户生成 digitalId * 此脚本用于数据库迁移,为所有没有 digitalId 的用户生成唯一的 ID */ async function migrateDigitalIds() { try { console.log('🚀 开始迁移 digitalId...'); // 查找所有没有 digitalId 的用户 const users = await prisma.user.findMany({ where: { digitalId: null }, }); console.log(`📊 找到 ${users.length} 个需要生成 digitalId 的用户`); if (users.length === 0) { console.log('✅ 所有用户都已拥有 digitalId,无需迁移'); return; } let successCount = 0; let failCount = 0; for (const user of users) { try { // 生成唯一的 digitalId const digitalId = await generateUniqueDigitalId(); // 更新用户 await prisma.user.update({ where: { id: user.id }, data: { digitalId }, }); console.log(`✅ 为用户 ${user.id} (${user.nickname || '未设置昵称'}) 生成 digitalId: ${digitalId}`); successCount++; } catch (error: any) { console.error(`❌ 为用户 ${user.id} 生成 digitalId 失败: ${error.message}`); failCount++; } } console.log('\n📊 迁移完成统计:'); console.log(` ✅ 成功: ${successCount} 个用户`); console.log(` ❌ 失败: ${failCount} 个用户`); console.log(` 📝 总计: ${users.length} 个用户`); if (failCount > 0) { console.log('\n⚠️ 有部分用户迁移失败,请检查日志并手动处理'); } else { console.log('\n🎉 所有用户迁移成功!'); } } catch (error) { console.error('❌ 迁移过程中发生错误:', error); throw error; } finally { await prisma.$disconnect(); } } // 执行迁移 migrateDigitalIds() .then(() => { console.log('✅ 迁移脚本执行完成'); process.exit(0); }) .catch((error) => { console.error('❌ 迁移脚本执行失败:', error); process.exit(1); });