Files
freedakgmail 5c8c70097c 0.8.0.0
2025-12-21 17:32:33 +08:00

98 lines
3.1 KiB
TypeScript

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function fixWangGenerations() {
try {
// 1. 找到 wang@example.com 用户
const user = await prisma.user.findUnique({
where: { email: 'wang@example.com' }
})
if (!user) {
console.log('❌ 用户 wang@example.com 不存在')
return
}
console.log(`✅ 找到用户: ${user.name || user.email} (ID: ${user.id})`)
// 2. 获取该用户的所有家族树
const trees = await prisma.familyTree.findMany({
where: { ownerId: user.id },
include: {
members: {
orderBy: [
{ generation: 'asc' },
{ createdAt: 'asc' }
]
}
}
})
if (trees.length === 0) {
console.log('❌ 该用户没有家族树')
return
}
for (const tree of trees) {
console.log(`\n📌 家族树: ${tree.name} (ID: ${tree.id})`)
console.log(` 成员数量: ${tree.members.length}`)
console.log(` 当前 rootMemberId: ${tree.rootMemberId}`)
// 显示当前成员的代数分布
console.log('\n 当前成员代数分布:')
const generationMap = new Map<number, typeof tree.members>()
for (const member of tree.members) {
if (!generationMap.has(member.generation)) {
generationMap.set(member.generation, [])
}
generationMap.get(member.generation)!.push(member)
}
for (const [gen, members] of Array.from(generationMap.entries()).sort((a, b) => a[0] - b[0])) {
console.log(`${gen}世: ${members.map(m => m.fullName).join(', ')}`)
}
// 3. 计算需要调整的偏移量
const minGeneration = Math.min(...tree.members.map(m => m.generation))
if (minGeneration > 1) {
const offset = minGeneration - 1
console.log(`\n ⚠️ 最小代数为 ${minGeneration},需要减少 ${offset}`)
// 4. 修复代数
console.log(' 正在修复代数...')
for (const member of tree.members) {
const newGeneration = member.generation - offset
await prisma.familyMember.update({
where: { id: member.id },
data: { generation: newGeneration }
})
console.log(` - ${member.fullName}: 第${member.generation}世 → 第${newGeneration}`)
}
// 5. 更新 rootMemberId 为第1代成员
const newRootMember = tree.members.find(m => m.generation === minGeneration)
if (newRootMember && tree.rootMemberId !== newRootMember.id) {
await prisma.familyTree.update({
where: { id: tree.id },
data: { rootMemberId: newRootMember.id }
})
console.log(` ✅ 更新 rootMemberId 为: ${newRootMember.fullName} (${newRootMember.id})`)
}
console.log(` ✅ 家族树 "${tree.name}" 代数修复完成`)
} else {
console.log(` ✅ 代数正常,无需修复`)
}
}
console.log('\n🎉 所有数据修复完成!')
} catch (error) {
console.error('❌ 修复失败:', error)
} finally {
await prisma.$disconnect()
}
}
fixWangGenerations()