98 lines
3.1 KiB
TypeScript
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()
|