trptk/app/api/checkout/shipping-method/route.ts
2026-02-24 17:14:07 +01:00

29 lines
1.1 KiB
TypeScript

import { NextResponse } from "next/server";
import { addShippingMethod } from "@/lib/medusa";
import { parseBody, isNonEmptyString, isValidMedusaId, badRequest, checkCsrf } from "@/lib/apiUtils";
// POST /api/checkout/shipping-method — add a shipping method to the cart
export async function POST(request: Request) {
const csrfError = await checkCsrf();
if (csrfError) return csrfError;
const body = await parseBody<{ cartId?: unknown; optionId?: unknown }>(request);
if (!body) return badRequest("Invalid request body");
const { cartId, optionId } = body;
if (!isNonEmptyString(cartId) || !isNonEmptyString(optionId)) {
return badRequest("Missing cartId or optionId");
}
if (!isValidMedusaId(cartId) || !isValidMedusaId(optionId)) {
return badRequest("Invalid ID format");
}
try {
const cart = await addShippingMethod(cartId, optionId);
return NextResponse.json(cart);
} catch (e) {
console.error("[checkout:shipping-method]", (e as Error).message);
return NextResponse.json({ error: "Failed to set shipping method" }, { status: 500 });
}
}