From 381c69f32c677405669d97e147b8d8a542d4bd8a Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 21 Feb 2023 10:29:34 +0800 Subject: [PATCH 1/4] Add save API endpoint to frontend for URL based saving --- packages/web/pages/api/save.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/web/pages/api/save.ts diff --git a/packages/web/pages/api/save.ts b/packages/web/pages/api/save.ts new file mode 100644 index 000000000..bae7b3796 --- /dev/null +++ b/packages/web/pages/api/save.ts @@ -0,0 +1,18 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import { saveUrlMutation } from '../../lib/networking/mutations/saveUrlMutation' + +// eslint-disable-next-line import/no-anonymous-default-export +export default async ( + req: NextApiRequest, + res: NextApiResponse +): Promise => { + const urlStr = req.query['url'] + const url = new URL(urlStr as string) + const saveResult = await saveUrlMutation(url.toString()) + if (saveResult?.jobId) { + res.redirect(`/sr/${saveResult?.jobId}`) + return + } + + res.status(200).send('ok') +} From 08a250177c97287287b3d7f169060c53206fecbd Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 21 Feb 2023 10:57:52 +0800 Subject: [PATCH 2/4] Add some more logging to the save API --- packages/web/pages/api/save.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web/pages/api/save.ts b/packages/web/pages/api/save.ts index bae7b3796..045ceeeae 100644 --- a/packages/web/pages/api/save.ts +++ b/packages/web/pages/api/save.ts @@ -9,6 +9,7 @@ export default async ( const urlStr = req.query['url'] const url = new URL(urlStr as string) const saveResult = await saveUrlMutation(url.toString()) + console.log('saveResult: ', saveResult) if (saveResult?.jobId) { res.redirect(`/sr/${saveResult?.jobId}`) return From a9b431708c3f21a867f78d80d2eb5ab7c3a0c6f6 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 21 Feb 2023 12:05:21 +0800 Subject: [PATCH 3/4] Use ssrFetcher for saving via /api/save --- .../networking/mutations/saveUrlMutation.ts | 17 +++---- packages/web/pages/api/save.ts | 47 ++++++++++++++++++- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/packages/web/lib/networking/mutations/saveUrlMutation.ts b/packages/web/lib/networking/mutations/saveUrlMutation.ts index bfcb620a2..524ac2add 100644 --- a/packages/web/lib/networking/mutations/saveUrlMutation.ts +++ b/packages/web/lib/networking/mutations/saveUrlMutation.ts @@ -2,19 +2,17 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' import { v4 as uuidv4 } from 'uuid' - - -type SaveLinkOutput = { +export type SaveLinkOutput = { jobId?: string url?: string clientRequestId?: string } -type SaveResponseData = { +export type SaveResponseData = { saveUrl?: SaveUrlData } -type SaveUrlData = { +export type SaveUrlData = { id: string url: string slug: string @@ -26,9 +24,7 @@ export async function saveUrlMutation( ): Promise { const clientRequestId = uuidv4() const mutation = gql` - mutation SaveUrl( - $input: SaveUrlInput! - ) { + mutation SaveUrl($input: SaveUrlInput!) { saveUrl(input: $input) { ... on SaveSuccess { url @@ -48,7 +44,7 @@ export async function saveUrlMutation( url, clientRequestId, source: 'add-link', - } + }, }) const output = data as SaveResponseData | undefined return { @@ -56,7 +52,8 @@ export async function saveUrlMutation( jobId: output?.saveUrl?.clientRequestId, clientRequestId: output?.saveUrl?.clientRequestId, } - } catch { + } catch (error) { + console.log('error savingUrl', { error }) return undefined } } diff --git a/packages/web/pages/api/save.ts b/packages/web/pages/api/save.ts index 045ceeeae..f651c93e0 100644 --- a/packages/web/pages/api/save.ts +++ b/packages/web/pages/api/save.ts @@ -1,5 +1,48 @@ import type { NextApiRequest, NextApiResponse } from 'next' -import { saveUrlMutation } from '../../lib/networking/mutations/saveUrlMutation' +import { + SaveResponseData, + saveUrlMutation, +} from '../../lib/networking/mutations/saveUrlMutation' +import { ssrFetcher } from '../../lib/networking/networkHelpers' +import { v4 as uuidv4 } from 'uuid' + +const saveUrl = async (req: NextApiRequest, url: URL) => { + const clientRequestId = uuidv4() + const mutation = ` + mutation SaveUrl($input: SaveUrlInput!) { + saveUrl(input: $input) { + ... on SaveSuccess { + url + clientRequestId + } + ... on SaveError { + errorCodes + message + } + } + } + ` + + try { + const data = await ssrFetcher({ req }, mutation, { + input: { + clientRequestId, + url: url.toString(), + source: 'api-save-url', + }, + }) + + const output = data as SaveResponseData | undefined + return { + url: output?.saveUrl?.url, + jobId: output?.saveUrl?.clientRequestId, + clientRequestId: output?.saveUrl?.clientRequestId, + } + } catch (error) { + console.log('error savingUrl', { error }) + return undefined + } +} // eslint-disable-next-line import/no-anonymous-default-export export default async ( @@ -8,7 +51,7 @@ export default async ( ): Promise => { const urlStr = req.query['url'] const url = new URL(urlStr as string) - const saveResult = await saveUrlMutation(url.toString()) + const saveResult = await saveUrl(req, url) console.log('saveResult: ', saveResult) if (saveResult?.jobId) { res.redirect(`/sr/${saveResult?.jobId}`) From d57b33587067a9bb81ca34f9a72eebf21d55f7e3 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 21 Feb 2023 12:05:33 +0800 Subject: [PATCH 4/4] Use ssrFetcher for saving via /api/save --- packages/web/pages/api/save.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/web/pages/api/save.ts b/packages/web/pages/api/save.ts index f651c93e0..71d4735d9 100644 --- a/packages/web/pages/api/save.ts +++ b/packages/web/pages/api/save.ts @@ -1,8 +1,5 @@ import type { NextApiRequest, NextApiResponse } from 'next' -import { - SaveResponseData, - saveUrlMutation, -} from '../../lib/networking/mutations/saveUrlMutation' +import { SaveResponseData } from '../../lib/networking/mutations/saveUrlMutation' import { ssrFetcher } from '../../lib/networking/networkHelpers' import { v4 as uuidv4 } from 'uuid'