import { NextResponse } from "next/server"; import { applyPromoCode, removePromoCode } from "@/lib/medusa"; import { parseBody, isNonEmptyString, isValidMedusaId, badRequest, checkCsrf } from "@/lib/apiUtils"; // POST /api/cart/[cartId]/promotions — apply a promo code 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<{ code?: unknown }>(request); if (!body) return badRequest("Invalid request body"); const { code } = body; if (!isNonEmptyString(code)) { return badRequest("Missing or invalid promo code"); } try { const cart = await applyPromoCode(cartId, code.trim()); return NextResponse.json(cart); } catch (e) { const msg = (e as Error).message ?? ""; console.error("[cart:promo:apply]", msg); return NextResponse.json( { error: "Invalid or expired promo code" }, { status: 400 }, ); } } // DELETE /api/cart/[cartId]/promotions — remove a promo code export async function DELETE( 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<{ code?: unknown }>(request); if (!body) return badRequest("Invalid request body"); const { code } = body; if (!isNonEmptyString(code)) { return badRequest("Missing or invalid promo code"); } try { const cart = await removePromoCode(cartId, code.trim()); return NextResponse.json(cart); } catch (e) { console.error("[cart:promo:remove]", (e as Error).message); return NextResponse.json( { error: "Failed to remove promo code" }, { status: 500 }, ); } }