From ce0bcfe33d6639614ba86aa751322faf90187c22 Mon Sep 17 00:00:00 2001 From: Alessandro Casazza Date: Tue, 31 Aug 2021 19:05:57 +0200 Subject: [PATCH] feat: Redirect to external checkout --- .../api/endpoints/checkout/checkout.ts | 24 ++++++++++++------- .../api/endpoints/checkout/index.ts | 11 ++++----- .../api/operations/get-all-pages.ts | 12 +++++++--- .../commercelayer/api/operations/get-page.ts | 6 ++++- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/framework/commercelayer/api/endpoints/checkout/checkout.ts b/framework/commercelayer/api/endpoints/checkout/checkout.ts index 5762eb790..809083144 100644 --- a/framework/commercelayer/api/endpoints/checkout/checkout.ts +++ b/framework/commercelayer/api/endpoints/checkout/checkout.ts @@ -3,22 +3,28 @@ import getCredentials from '@framework/api/utils/getCredentials' import { Order } from '@commercelayer/js-sdk' const checkout: CheckoutEndpoint['handlers']['checkout'] = async ({ + req, res, }) => { - const id = localStorage.getItem('CL_ORDER') || '' - const credentials = getCredentials() - if (id && credentials.accessToken) { - const clOrder = await Order.withCredentials(credentials) + let { orderId, accessToken } = req.query + accessToken = + typeof accessToken === 'string' ? accessToken.split('; CL_TOKEN=') : '' + accessToken = accessToken[accessToken.length - 1] + const { endpoint } = getCredentials() + if (orderId && accessToken) { + const clOrder = await Order.withCredentials({ endpoint, accessToken }) .includes('lineItems') - .find(id, { rawResponse: true }) + .find(orderId as string, { rawResponse: true }) const checkoutUrl = clOrder.data.attributes.checkout_url console.log(checkoutUrl) if (checkoutUrl) { - res.redirect(checkoutUrl) - } else { - res.redirect('/cart') - } + res.redirect(checkoutUrl) + } else { + res.redirect('/cart') + } + } else { + res.redirect('/') } } diff --git a/framework/commercelayer/api/endpoints/checkout/index.ts b/framework/commercelayer/api/endpoints/checkout/index.ts index 36a004bf2..6ec2854bd 100644 --- a/framework/commercelayer/api/endpoints/checkout/index.ts +++ b/framework/commercelayer/api/endpoints/checkout/index.ts @@ -1,18 +1,17 @@ -import { GetAPISchema, createEndpoint } from '@commerce/api' +import { GetAPISchema, createEndpoint, CommerceAPI } from '@commerce/api' import checkoutEndpoint from '@commerce/api/endpoints/checkout' import type { CheckoutSchema } from '@commerce/types/checkout' import type { CommercelayerAPI } from '../..' import checkout from './checkout' -export type CheckoutAPI = GetAPISchema - -export type CheckoutEndpoint = CheckoutAPI['endpoint'] - export const handlers: CheckoutEndpoint['handlers'] = { checkout } +export type CheckoutAPI = GetAPISchema +export type CheckoutEndpoint = CheckoutAPI['endpoint'] + const checkoutApi = createEndpoint({ handler: checkoutEndpoint, handlers, }) -export default checkoutApi \ No newline at end of file +export default checkoutApi diff --git a/framework/commercelayer/api/operations/get-all-pages.ts b/framework/commercelayer/api/operations/get-all-pages.ts index b258fe70a..42a79cf0f 100644 --- a/framework/commercelayer/api/operations/get-all-pages.ts +++ b/framework/commercelayer/api/operations/get-all-pages.ts @@ -1,6 +1,6 @@ export type Page = { url: string } export type GetAllPagesResult = { pages: Page[] } -import type { LocalConfig } from '../index' +import type { CommercelayerAPI } from '../index' export default function getAllPagesOperation() { function getAllPages({ @@ -8,11 +8,17 @@ export default function getAllPagesOperation() { preview, }: { url?: string - config?: Partial + config?: Partial preview?: boolean }): Promise { + console.log(`config`, config, preview) return Promise.resolve({ - pages: [], + pages: [ + { + id: 'checkout', + url: `/en-US/checkout`, + }, + ], }) } return getAllPages diff --git a/framework/commercelayer/api/operations/get-page.ts b/framework/commercelayer/api/operations/get-page.ts index b0cfdf58f..839ddd360 100644 --- a/framework/commercelayer/api/operations/get-page.ts +++ b/framework/commercelayer/api/operations/get-page.ts @@ -7,7 +7,11 @@ export type PageVariables = { export default function getPageOperation() { function getPage(): Promise { - return Promise.resolve({}) + return Promise.resolve({ + page: { + body: ``, + }, + }) } return getPage }