mirror of
https://github.com/vercel/commerce.git
synced 2025-05-18 23:46:58 +00:00
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { normalizeCart } from '../../../lib/normalize'
|
|
import type { CartEndpoint } from '.'
|
|
import { getCartQuery } from '../../../api/queries/get-cart-query'
|
|
import updateCartItemQuantityMutation from '../../../api/mutations/updateCartItemQuantity-mutation'
|
|
|
|
const updateItem: CartEndpoint['handlers']['updateItem'] = async ({
|
|
req,
|
|
res,
|
|
body: { cartId, itemId, item },
|
|
config,
|
|
}) => {
|
|
if (!itemId || !item) {
|
|
return res.status(400).json({
|
|
data: null,
|
|
errors: [{ message: 'Invalid request' }],
|
|
})
|
|
}
|
|
const encodedToken = req.cookies[config.customerCookie]
|
|
const token = encodedToken
|
|
? Buffer.from(encodedToken, 'base64').toString('ascii')
|
|
: null
|
|
|
|
const accessToken = token ? JSON.parse(token).accessToken : null
|
|
|
|
const updateItemResponse = await config.fetch(
|
|
updateCartItemQuantityMutation,
|
|
{
|
|
variables: { itemId: itemId, quantity: item.quantity },
|
|
},
|
|
{ headers: { 'x-vol-user-claims': accessToken } }
|
|
)
|
|
|
|
let currentCart = null
|
|
if (updateItemResponse.data) {
|
|
let result = await config.fetch(
|
|
getCartQuery,
|
|
{},
|
|
{ headers: { 'x-vol-user-claims': accessToken } }
|
|
)
|
|
currentCart = result?.data?.currentCart
|
|
}
|
|
res.status(200).json({ data: normalizeCart(currentCart) })
|
|
}
|
|
|
|
export default updateItem
|