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