mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 15:36:58 +00:00
94 lines
2.3 KiB
TypeScript
94 lines
2.3 KiB
TypeScript
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
|