From 48f6b38c333fdaf57fe418c6e6a5fc4bfb928921 Mon Sep 17 00:00:00 2001 From: Joe Carstairs <65492573+Sycamost@users.noreply.github.com> Date: Mon, 7 Aug 2023 20:46:07 +0100 Subject: Pre-compiles api --- api-src/createPaypalOrder.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 api-src/createPaypalOrder.ts (limited to 'api-src/createPaypalOrder.ts') diff --git a/api-src/createPaypalOrder.ts b/api-src/createPaypalOrder.ts new file mode 100644 index 0000000..c0053d4 --- /dev/null +++ b/api-src/createPaypalOrder.ts @@ -0,0 +1,34 @@ +import type { VercelRequest, VercelResponse } from '@vercel/node'; +import type Order from './Order'; +import { paypalCreateOrder } from './_paypal'; + +export default async function handler(request: VercelRequest, response: VercelResponse) { + const { productDescription, shortDescription, totalPrice }: Partial = request.body; + + if (request.method !== 'POST') { + response.status(404); + return; + } + + if (!productDescription) { + response.status(400).send('Expected body to contain productDescription, but none provided.'); + } else if (!shortDescription) { + response.status(400).send('Expected body to contain shortDescription, but none provided.'); + } else if (!totalPrice) { + response.status(400).send('Expected body to contain totalPrice, but none provided.'); + } else { + try { + const paypalResponse = await paypalCreateOrder({ productDescription, shortDescription, totalPrice }); + + if (paypalResponse.ok) { + response.status(200).json({ + orderId: paypalResponse.id, + }); + } else { + throw new Error(`PayPal returned ${paypalResponse.statusCode} ${paypalResponse.statusMessage}`); + } + } catch (err) { + response.status(500).send(`Internal server error. ${err}`); + } + } +} -- cgit v1.2.3