import { NextResponse } from "next/server"; import { prisma } from "../../../../lib/prisma"; import { cookies } from "next/headers"; import { getServerSession } from "next-auth"; import { authOptions } from "../../../../lib/auth"; export async function POST(req: Request) { try { const body = await req.json(); const itemId = body.itemId as string; if (!itemId) { return NextResponse.json({ error: "itemId is required." }, { status: 400 }); } const session = await getServerSession(authOptions); const cookieStore = cookies(); let sessionId = cookieStore.get("sf_session")?.value; const createdNew = !sessionId; if (!sessionId && !session?.user?.email) { return NextResponse.json({ error: "Missing cart session." }, { status: 400 }); } const item = await prisma.cartItem.findUnique({ where: { id: itemId }, include: { cart: true }, }); if (!item) { return NextResponse.json({ error: "Item not found." }, { status: 404 }); } if (session?.user?.email) { const user = await prisma.user.findUnique({ where: { email: session.user.email }, }); if (!user) { return NextResponse.json({ error: "User not found." }, { status: 404 }); } if (item.cart.userId !== user.id && item.cart.sessionId !== sessionId) { return NextResponse.json({ error: "Item not found." }, { status: 404 }); } if (!sessionId) { sessionId = crypto.randomUUID(); await prisma.cart.update({ where: { id: item.cartId }, data: { sessionId }, }); } } else if (item.cart.sessionId !== sessionId) { return NextResponse.json({ error: "Item not found." }, { status: 404 }); } await prisma.cartItem.delete({ where: { id: itemId } }); const res = NextResponse.json({ deleted: true }); if (createdNew && sessionId) { res.cookies.set("sf_session", sessionId, { httpOnly: true, sameSite: "lax", path: "/", }); } return res; } catch (err: any) { return NextResponse.json( { error: err?.message || "Failed to remove cart item." }, { status: 500 } ); } }