import { createServerFn } from "@tanstack/react-start" import { createCartHandlers } from "@wp-reactor/commerce" import { cartMiddleware } from "./cartMiddleware" // Wrappers serverFn MINCES autour de `createCartHandlers` (Option B). Le timing // Woo est injecté depuis l'env de la coque. const timing = process.env.WOO_TIMING === "1" export const getCart = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .handler(({ context }) => createCartHandlers({ ...context, timing }).getCart(), ) export const addCartItem = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .inputValidator( (data: { productId: number; quantity?: number; variationId?: number }) => ({ productId: Number(data.productId), quantity: data.quantity != null ? Number(data.quantity) : undefined, variationId: data.variationId != null ? Number(data.variationId) : undefined, }), ) .handler(({ context, data }) => createCartHandlers({ ...context, timing }).addCartItem(data), ) export const removeCartItems = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .inputValidator((data: { keys: string[] }) => ({ keys: data.keys.map((k) => String(k)), })) .handler(({ context, data }) => createCartHandlers({ ...context, timing }).removeCartItems(data.keys), ) export const updateCartItemQuantities = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .inputValidator( (data: { items: Array<{ key: string; quantity: number }> }) => ({ items: data.items.map((i) => ({ key: String(i.key), quantity: Number(i.quantity), })), }), ) .handler(({ context, data }) => createCartHandlers({ ...context, timing }).updateCartItemQuantities( data.items, ), ) export const applyCoupon = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .inputValidator((data: { code: string }) => ({ code: String(data.code) })) .handler(({ context, data }) => createCartHandlers({ ...context, timing }).applyCoupon(data.code), ) export const removeCoupons = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .inputValidator((data: { codes: string[] }) => ({ codes: data.codes.map((c) => String(c)), })) .handler(({ context, data }) => createCartHandlers({ ...context, timing }).removeCoupons(data.codes), ) export const getCheckoutUrl = createServerFn({ method: "POST" }) .middleware([cartMiddleware]) .handler(({ context }) => createCartHandlers({ ...context, timing }).getCheckoutUrl(), )