feat(ecommerce): ADR 0009 - carrito real conectado a Medusa (Store API)
Primer corte de checkout real, a proposito acotado: el carrito pasa de estado 100% local (localStorage con productos completos) a sincronizar con un cart_id real de Medusa via /api/cart/* (rutas puente same-origin, mismo patron que /api/search -- MEDUSA_BACKEND_URL es DNS interno del cluster, no resuelve desde el navegador). Formas de respuesta de la API verificadas en vivo con un carrito de prueba real antes de escribir el mapeo (no asumidas contra documentacion): agregar el mismo variant_id dos veces hace merge de cantidad automatico (no crea linea duplicada); eliminar una linea devuelve el carrito actualizado en 'parent', no en 'cart' como los demas endpoints. La firma publica de useCartStore (addItem/removeItem/updateQuantity/ items) no cambia, asi que ningun componente consumidor (cart-drawer, navbar, product-card, product-purchase, mobile-add-to-cart) necesito tocarse. Sigue cerrando por WhatsApp -- direccion/envio/pago quedan para los siguientes cortes del ADR 0009.
This commit is contained in:
1 parent
14c473eb8b
commit
3fc77c6cdc
5 files changed
+325
-31
No files matched your search
@@ -0,0 +1,14 @@
|
||||
import { addLineItem } from "@/lib/headless/providers/medusa-cart";
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const { cartId, variantId, quantity } = await request.json();
|
||||
if (!cartId || !variantId) {
|
||||
return Response.json({ error: "cartId y variantId son obligatorios" }, { status: 400 });
|
||||
}
|
||||
try {
|
||||
const cart = await addLineItem(cartId, variantId, quantity ?? 1);
|
||||
return Response.json(cart);
|
||||
} catch (error) {
|
||||
return Response.json({ error: (error as Error).message }, { status: 502 });
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user