import { NextResponse } from "next/server"; import { updateCartItem, removeFromCart } from "@/lib/medusa"; import { parseBody, isPositiveInt, isValidMedusaId, badRequest, checkCsrf } from "@/lib/apiUtils"; // POST /api/cart/[cartId]/items/[itemId] — update quantity export async function POST( request: Request, { params }: { params: Promise<{ cartId: string; itemId: string }> }, ) { const csrfError = await checkCsrf(); if (csrfError) return csrfError; const { cartId, itemId } = await params; if (!isValidMedusaId(cartId) || !isValidMedusaId(itemId)) { return badRequest("Invalid ID format"); } const body = await parseBody<{ quantity?: unknown }>(request); if (!body) return badRequest("Invalid request body"); const { quantity } = body; if (!isPositiveInt(quantity)) { return badRequest("Quantity must be a positive integer"); } try { const cart = await updateCartItem(cartId, itemId, quantity); return NextResponse.json(cart); } catch (e) { console.error("[cart:update]", (e as Error).message); return NextResponse.json({ error: "Failed to update item" }, { status: 500 }); } } // DELETE /api/cart/[cartId]/items/[itemId] — remove line item export async function DELETE( _request: Request, { params }: { params: Promise<{ cartId: string; itemId: string }> }, ) { const csrfError = await checkCsrf(); if (csrfError) return csrfError; const { cartId, itemId } = await params; if (!isValidMedusaId(cartId) || !isValidMedusaId(itemId)) { return badRequest("Invalid ID format"); } try { const cart = await removeFromCart(cartId, itemId); return NextResponse.json(cart); } catch (e) { console.error("[cart:remove]", (e as Error).message); return NextResponse.json({ error: "Failed to remove item" }, { status: 500 }); } }