mirror of
https://github.com/vercel/commerce.git
synced 2025-06-07 16:56:59 +00:00
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { LineItem } from '../../../types/cart'
|
|
import placeOrder from '../../mutations/place-order'
|
|
import setEmailOnAnonymousCart from '../../mutations/set-email-on-anonymous-cart'
|
|
import getCartCookie from '../../utils/get-cart-cookie'
|
|
import type { CheckoutEndpoint } from '.'
|
|
|
|
const submitCheckout: CheckoutEndpoint['handlers']['submitCheckout'] = async ({
|
|
res,
|
|
body: { item, cartId },
|
|
config: { fetch, shopId, anonymousCartTokenCookie, cartCookie },
|
|
req: { cookies },
|
|
}) => {
|
|
await fetch(setEmailOnAnonymousCart, {
|
|
variables: {
|
|
input: {
|
|
cartId,
|
|
cartToken: cookies[anonymousCartTokenCookie],
|
|
email: 'opencommerce@test.com',
|
|
},
|
|
},
|
|
})
|
|
|
|
const { data } = await fetch(placeOrder, {
|
|
variables: {
|
|
input: {
|
|
payments: {
|
|
data: { fullName: 'Open Commerce Demo Site' },
|
|
amount: item.checkout.cart.checkout.summary.total.amount,
|
|
method: 'iou_example',
|
|
},
|
|
order: {
|
|
cartId,
|
|
currencyCode: item.checkout.cart.currency.code,
|
|
email: 'opencommerce@test.com',
|
|
shopId,
|
|
fulfillmentGroups: {
|
|
shopId,
|
|
data: item.checkout.cart.checkout.fulfillmentGroups[0].data,
|
|
items: item.checkout.cart.lineItems.map((item: LineItem) => ({
|
|
price: item.variant.price,
|
|
quantity: item.quantity,
|
|
productConfiguration: {
|
|
productId: item.productId,
|
|
productVariantId: item.variantId,
|
|
},
|
|
})),
|
|
type: item.checkout.cart.checkout.fulfillmentGroups[0].type,
|
|
selectedFulfillmentMethodId:
|
|
item.checkout.cart.checkout.fulfillmentGroups[0]
|
|
.selectedFulfillmentOption.fulfillmentMethod._id,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
|
|
res.setHeader('Set-Cookie', [
|
|
getCartCookie(cartCookie),
|
|
getCartCookie(anonymousCartTokenCookie),
|
|
])
|
|
|
|
res.status(200).json({ data: null, errors: [] })
|
|
}
|
|
|
|
export default submitCheckout
|