// app/api/invites/accept/route.ts import { NextRequest, NextResponse } from "next/server" import { getServerSession } from "next-auth" import { authOptions } from "@/lib/auth/config" import { prisma } from "@/lib/prisma" export async function POST(request: NextRequest) { try { const session = await getServerSession(authOptions) if (!session) { return NextResponse.json({ error: "Não autenticado" }, { status: 401 }) } const { inviteCode } = await request.json() if (!inviteCode) { return NextResponse.json({ error: "Código de convite inválido" }, { status: 400 }) } // Buscar convite const invite = await prisma.invite.findUnique({ where: { token: inviteCode } }) if (!invite) { return NextResponse.json({ error: "Convite não encontrado" }, { status: 404 }) } // Buscar workspace const workspace = invite.workspaceId ? await prisma.workspace.findUnique({ where: { id: invite.workspaceId } }) : null if (!workspace) { return NextResponse.json({ error: "Workspace não encontrado" }, { status: 404 }) } // Verificar se está expirado if (invite.expiresAt < new Date()) { return NextResponse.json({ error: "Convite expirado" }, { status: 400 }) } // Verificar se já foi aceito if (invite.status !== "PENDING") { return NextResponse.json({ error: "Convite já foi utilizado" }, { status: 400 }) } // Verificar se o email confere if (invite.email !== session.user.email) { return NextResponse.json({ error: "Este convite não é para você" }, { status: 403 }) } // Atualizar convite await prisma.invite.update({ where: { id: invite.id }, data: { status: "ACCEPTED", acceptedAt: new Date() } }) // Ativar workspace await prisma.workspace.update({ where: { id: invite.workspaceId! }, data: { status: "ACTIVE" } }) return NextResponse.json({ success: true, workspace: { id: workspace.id, slug: workspace.slug } }) } catch (error: any) { console.error("Erro ao aceitar convite:", error) return NextResponse.json( { error: "Erro ao aceitar convite" }, { status: 500 } ) } }