import { type NextRequest, NextResponse } from "next/server"; import { requireAuth } from "@/lib/auth/middleware"; import { getUnreadCount, getUserNotifications, markAllAsRead, } from "@/lib/prisma/queries/notifications"; import { secureLogger } from "@/lib/secure-logger"; /** * GET /api/notifications * Lista notificações do usuário autenticado */ export async function GET(request: NextRequest) { try { const authResult = await requireAuth(request); if (authResult instanceof NextResponse) return authResult; const auth = authResult; const { searchParams } = new URL(request.url); const isRead = searchParams.get("is_read"); const limit = searchParams.get("limit") ? parseInt(searchParams.get("limit")!, 10) : 50; const notifications = await getUserNotifications(auth.userId, { is_read: isRead === "true" ? true : isRead === "false" ? false : undefined, limit, }); const unreadCount = await getUnreadCount(auth.userId); return NextResponse.json( { success: true, notifications, unread_count: unreadCount, }, { status: 200 }, ); } catch (error) { secureLogger.error("❌ Erro ao buscar notificações", { error: error instanceof Error ? error.message : "Erro desconhecido", stack: error instanceof Error ? error.stack : undefined, }); return NextResponse.json( { success: false, error: "Erro ao buscar notificações" }, { status: 500 }, ); } } /** * POST /api/notifications/read-all * Marca todas as notificações como lidas */ export async function POST(request: NextRequest) { try { const authResult = await requireAuth(request); if (authResult instanceof NextResponse) return authResult; const auth = authResult; const { searchParams } = new URL(request.url); const action = searchParams.get("action"); if (action === "read-all") { const count = await markAllAsRead(auth.userId); return NextResponse.json( { success: true, message: `${count} notificações marcadas como lidas`, count, }, { status: 200 }, ); } return NextResponse.json( { success: false, error: "Ação inválida" }, { status: 400 }, ); } catch (error) { secureLogger.error("❌ Erro ao marcar notificações como lidas", { error: error instanceof Error ? error.message : "Erro desconhecido", }); return NextResponse.json( { success: false, error: "Erro ao marcar notificações como lidas" }, { status: 500 }, ); } }