001project_wildgrowth/backend/scripts/migrate-digital-id.ts

74 lines
2.1 KiB
TypeScript
Raw 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
});