import { NextRequest, NextResponse } from "next/server" import { getServerSession } from "next-auth" import { authOptions } from "@/lib/auth" import { prisma } from "@/lib/prisma" import { checkPermission } from "@/lib/permissions" import { Role } from "@prisma/client" // 获取单个成员 export async function GET( req: NextRequest, { params }: { params: Promise<{ treeId: string; memberId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId, memberId } = await params // 检查权限 const { hasPermission } = await checkPermission(session.user.id, treeId) if (!hasPermission) { return NextResponse.json({ error: "无权访问此家族树" }, { status: 403 }) } const member = await prisma.familyMember.findFirst({ where: { id: memberId, treeId, } }) if (!member) { return NextResponse.json({ error: "成员不存在" }, { status: 404 }) } return NextResponse.json({ member }) } catch (error) { console.error("获取成员失败:", error) return NextResponse.json( { error: "获取成员失败" }, { status: 500 } ) } } // 更新成员 export async function PATCH( req: NextRequest, { params }: { params: Promise<{ treeId: string; memberId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId, memberId } = await params // 检查权限(需要 EDITOR 权限) const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR) if (!hasPermission) { return NextResponse.json({ error: "无权限修改成员" }, { status: 403 }) } const body = await req.json() // 检查成员是否存在 const existingMember = await prisma.familyMember.findFirst({ where: { id: memberId, treeId, } }) if (!existingMember) { return NextResponse.json({ error: "成员不存在" }, { status: 404 }) } const member = await prisma.familyMember.update({ where: { id: memberId }, data: { ...body, updatedAt: new Date(), } }) // 记录操作日志 await prisma.activityLog.create({ data: { treeId, userId: session.user.id, action: 'UPDATE', entityType: 'MEMBER', entityId: member.id, entityName: member.fullName, changes: body, } }) return NextResponse.json({ member }) } catch (error) { console.error("更新成员失败:", error) return NextResponse.json( { error: "更新成员失败" }, { status: 500 } ) } } // 删除成员 export async function DELETE( req: NextRequest, { params }: { params: Promise<{ treeId: string; memberId: string }> } ) { try { const session = await getServerSession(authOptions) if (!session?.user?.id) { return NextResponse.json({ error: "未授权" }, { status: 401 }) } const { treeId, memberId } = await params // 检查权限(需要 EDITOR 权限) const { hasPermission } = await checkPermission(session.user.id, treeId, Role.EDITOR) if (!hasPermission) { return NextResponse.json({ error: "无权限删除成员" }, { status: 403 }) } // 检查成员是否存在 const existingMember = await prisma.familyMember.findFirst({ where: { id: memberId, treeId, } }) if (!existingMember) { return NextResponse.json({ error: "成员不存在" }, { status: 404 }) } await prisma.familyMember.delete({ where: { id: memberId } }) // 记录操作日志 await prisma.activityLog.create({ data: { treeId, userId: session.user.id, action: 'DELETE', entityType: 'MEMBER', entityId: memberId, entityName: existingMember.fullName, } }) return NextResponse.json({ success: true }) } catch (error) { console.error("删除成员失败:", error) return NextResponse.json( { error: "删除成员失败" }, { status: 500 } ) } }