import type { CartHandlers } from '..' import { addCartItemsMutation, checkoutCreateMutation, } from '@framework/utils/mutations' import getCartCookie from '@framework/api/utils/get-cart-cookie' import { REACTION_ANONYMOUS_CART_TOKEN_COOKIE, REACTION_CART_ID_COOKIE, } from '@framework/const' const addItem: CartHandlers['addItem'] = async ({ req: { cookies: { [REACTION_ANONYMOUS_CART_TOKEN_COOKIE]: anonymousCartToken, [REACTION_CART_ID_COOKIE]: cartId, }, }, res, body: { item }, config, }) => { console.log('add-item API', item.productId) console.log('variantId', item.variantId) if (!item) { return res.status(400).json({ data: null, errors: [{ message: 'Missing item' }], }) } if (!item.quantity) item.quantity = 1 if (cartId === config.dummyEmptyCartId) { const createdCart = await config.fetch(checkoutCreateMutation, { variables: { input: { shopId: config.shopId, items: [ { productConfiguration: { productId: item.productId, productVariantId: item.variantId, }, quantity: item.quantity, price: item.pricing, }, ], }, }, }) console.log('cart token', createdCart.data.createCart.token) console.log('created cart', createdCart.data.createCart.cart) res.setHeader('Set-Cookie', [ getCartCookie(config.cartCookie, createdCart.data.createCart.token, 999), getCartCookie( config.cartIdCookie, createdCart.data.createCart.cart._id, 999 ), ]) return res.status(200).json(createdCart.data) } else if (cartId && anonymousCartToken) { const updatedCart = await config.fetch(addCartItemsMutation, { variables: { input: { cartId, cartToken: anonymousCartToken, items: [ { productConfiguration: { productId: item.productId, productVariantId: item.variantId, }, quantity: item.quantity, price: item.pricing, }, ], }, }, }) console.log('updatedCart', updatedCart) return res.status(200).json(updatedCart.data) } res.status(200) } export default addItem