This commit is contained in:
freedakgmail
2025-11-30 09:16:43 +08:00
parent b436ae0680
commit fd9c064749
227 changed files with 1251 additions and 912 deletions
+50 -51
View File
@@ -17,69 +17,68 @@ export async function GET(
const { treeId } = await params
const tree = await prisma.familyTree.findFirst({
where: {
id: treeId,
OR: [
{ ownerId: session.user.id },
{
collaborators: {
some: {
userId: session.user.id
// 并行查询树信息和协作者角色
const [tree, collaborator] = await Promise.all([
prisma.familyTree.findFirst({
where: {
id: treeId,
OR: [
{ ownerId: session.user.id },
{
collaborators: {
some: {
userId: session.user.id
}
}
}
}
]
},
include: {
owner: {
select: {
id: true,
name: true,
email: true,
}
]
},
_count: {
select: {
members: true,
collaborators: true,
select: {
id: true,
name: true,
description: true,
rootMemberId: true,
ownerId: true,
createdAt: true,
updatedAt: true,
owner: {
select: {
id: true,
name: true,
email: true,
}
},
_count: {
select: {
members: true,
collaborators: true,
}
}
}
}
})
}),
prisma.treeCollaborator.findFirst({
where: {
treeId,
userId: session.user.id
},
select: { role: true }
})
])
if (!tree) {
return NextResponse.json({ error: "家族树不存在或无权访问" }, { status: 404 })
}
// 计算当前用户角色
let currentUserRole = "VIEWER"
if (tree.ownerId === session.user.id) {
currentUserRole = "OWNER"
} else {
const collaborator = await prisma.treeCollaborator.findUnique({
where: {
treeId_userId: {
treeId: tree.id,
userId: session.user.id
}
}
})
if (collaborator) {
currentUserRole = collaborator.role
}
}
const currentUserRole = tree.ownerId === session.user.id
? "OWNER"
: (collaborator?.role || "VIEWER")
console.log('🌳 GET /api/trees/[treeId] 返回数据:', {
treeId,
userId: session.user.id,
treeName: tree.name,
currentUserRole,
membersCount: tree._count.members,
collaboratorsCount: tree._count.collaborators
})
return NextResponse.json({ tree: { ...tree, currentUserRole } })
// 添加缓存头
const response = NextResponse.json({ tree: { ...tree, currentUserRole } })
response.headers.set('Cache-Control', 'private, max-age=60, stale-while-revalidate=30')
return response
} catch (error) {
console.error("获取家族树失败:", error)
return NextResponse.json(