import { NextRequest, NextResponse } from "next/server" import { getServerSession } from "next-auth" import { authOptions } from "@/lib/auth" import { prisma } from "@/lib/prisma" // 获取单个家族树信息 export async function GET( req: NextRequest, { params }: { params: Promise<{ treeId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId } = await params const tree = await 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, } } } }) 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 } } 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 } }) } catch (error) { console.error("获取家族树失败:", error) return NextResponse.json( { error: "获取家族树失败" }, { status: 500 } ) } } // 更新家族树信息 export async function PATCH( req: NextRequest, { params }: { params: Promise<{ treeId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId } = await params const body = await req.json() const { name, description } = body // 检查权限 const tree = await prisma.familyTree.findFirst({ where: { id: treeId, ownerId: session.user.id } }) if (!tree) { return NextResponse.json({ error: "家族树不存在或无权修改" }, { status: 404 }) } // 更新家族树 const updatedTree = await prisma.familyTree.update({ where: { id: treeId }, data: { name: name || tree.name, description: description !== undefined ? description : tree.description, }, include: { owner: { select: { id: true, name: true, email: true, } } } }) return NextResponse.json({ tree: updatedTree }) } catch (error) { console.error("更新家族树失败:", error) return NextResponse.json( { error: "更新家族树失败" }, { status: 500 } ) } } // 删除家族树 export async function DELETE( req: NextRequest, { params }: { params: Promise<{ treeId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId } = await params // 检查权限 const tree = await prisma.familyTree.findFirst({ where: { id: treeId, ownerId: session.user.id } }) if (!tree) { return NextResponse.json({ error: "家族树不存在或无权删除" }, { status: 404 }) } // 删除家族树(会级联删除所有成员和相关数据) await prisma.familyTree.delete({ where: { id: treeId } }) return NextResponse.json({ success: true }) } catch (error) { console.error("删除家族树失败:", error) return NextResponse.json( { error: "删除家族树失败" }, { status: 500 } ) } }