import { and, eq } from "drizzle-orm"; import { headers } from "next/headers"; import { connection, NextResponse } from "next/server"; import { apiTokens } from "@/db/schema"; import { auth } from "@/shared/lib/auth/config"; import { db } from "@/shared/lib/db"; interface RouteParams { params: Promise<{ tokenId: string }>; } export async function DELETE(_request: Request, { params }: RouteParams) { await connection(); const { tokenId } = await params; // Verificar autenticação via sessão web const requestHeaders = new Headers(await headers()); const session = await auth.api.getSession({ headers: requestHeaders }); if (!session?.user) { return NextResponse.json({ error: "Não autenticado" }, { status: 401 }); } try { // Verificar se token pertence ao usuário const token = await db.query.apiTokens.findFirst({ where: and( eq(apiTokens.id, tokenId), eq(apiTokens.userId, session.user.id), ), }); if (!token) { return NextResponse.json( { error: "Token não encontrado" }, { status: 404 }, ); } // Revogar token (soft delete) await db .update(apiTokens) .set({ revokedAt: new Date() }) .where( and(eq(apiTokens.id, tokenId), eq(apiTokens.userId, session.user.id)), ); return NextResponse.json({ message: "Token revogado com sucesso", tokenId, }); } catch (error) { console.error("[API] Error revoking device token:", error); return NextResponse.json( { error: "Erro ao revogar token" }, { status: 500 }, ); } }