From e9f4753fdc05e2e64ea731fb193285956468eee9 Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Sat, 22 Aug 2020 00:09:11 +0200 Subject: [PATCH] add /booking/uuid --- helpers/storage.js | 19 +++++++++++-------- pages/api/booking/[uuid].js | 20 ++++++++++++++++++++ pages/api/{booking.js => booking/index.js} | 4 ++-- pages/booking/{[id].js => [uuid].js} | 12 +++++++++--- 4 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 pages/api/booking/[uuid].js rename pages/api/{booking.js => booking/index.js} (86%) rename pages/booking/{[id].js => [uuid].js} (74%) diff --git a/helpers/storage.js b/helpers/storage.js index 3576db6..7f7b444 100644 --- a/helpers/storage.js +++ b/helpers/storage.js @@ -1,27 +1,30 @@ -const FORM_DATA_KEY = 'pfadiBussleFormData' +const BOOKING_DATA_KEY = 'pfadiBussleBookingData' function getStorage() { return localStorage } -export function storeFormData({ org, name, email, street, zip, city }) { +export function storeBookingData({ booker, ...booking }) { + const { name, email, street, zip, city } = booker + const { org } = booking + getStorage().setItem( - FORM_DATA_KEY, + BOOKING_DATA_KEY, JSON.stringify({ org, name, email, street, zip, city }) ) } -export function clearFormData() { - getStorage().removeItem(FORM_DATA_KEY) +export function clearBookingData() { + getStorage().removeItem(BOOKING_DATA_KEY) } -export function loadFormData() { - const dataAsString = getStorage().getItem(FORM_DATA_KEY) +export function loadBookingData() { + const dataAsString = getStorage().getItem(BOOKING_DATA_KEY) let result = null try { result = JSON.parse(dataAsString) } catch (e) { - console.error(`localStorage ${FORM_DATA_KEY} has invalid data stored`) + console.error(`localStorage ${BOOKING_DATA_KEY} has invalid data stored`) } return result diff --git a/pages/api/booking/[uuid].js b/pages/api/booking/[uuid].js new file mode 100644 index 0000000..a9e8933 --- /dev/null +++ b/pages/api/booking/[uuid].js @@ -0,0 +1,20 @@ +import { getBookingByUUID, createBooking } from '../../../db/index' + +export default async function userHandler(req, res) { + const { + method, + query: { uuid }, + } = req + + let booking + + switch (method) { + case 'GET': + booking = await getBookingByUUID(uuid) + res.status(200).json(booking) + break + default: + res.setHeader('Allow', ['POST']) + res.status(405).end(`Method ${method} Not Allowed`) + } +} diff --git a/pages/api/booking.js b/pages/api/booking/index.js similarity index 86% rename from pages/api/booking.js rename to pages/api/booking/index.js index 50fe954..a409c2b 100644 --- a/pages/api/booking.js +++ b/pages/api/booking/index.js @@ -1,7 +1,7 @@ -import { createBooking } from '../../db/index' +import { createBooking } from '../../../db/index' import { Error } from 'mongoose' -import { sendReceivedBookingMail } from '../../helpers/mail' +import { sendReceivedBookingMail } from '../../../helpers/mail' export default async function userHandler(req, res) { const { method } = req diff --git a/pages/booking/[id].js b/pages/booking/[uuid].js similarity index 74% rename from pages/booking/[id].js rename to pages/booking/[uuid].js index 3eef305..a481866 100644 --- a/pages/booking/[id].js +++ b/pages/booking/[uuid].js @@ -1,9 +1,14 @@ import React, { useContext } from 'react' -import { AppContext } from '../../context/appStore' + +import { WizardContext } from '../../context/wizardStore' import Footer from '../../components/footer' +// TODO: load booking somehow if we navigate to booking +// TODO: when storing data take loaded booking instead of fromData +// TODO: show state of booking and minimal data + export default function Booking() { - const { state, storeData } = useContext(AppContext) + const { state, storeData } = useContext(WizardContext) const { dataStored, dataStoredLoaded } = state return ( @@ -11,7 +16,7 @@ export default function Booking() {

Pfadi Bussle Buchung

-

Danke, die Buchung ist in Bearbeitung!

+

Vielen Dank für die Buchung!

Nach Prüfung bestätigen wir die Buchung bald per E-Mail!

{!dataStoredLoaded && typeof dataStored !== 'boolean' && ( <> @@ -33,6 +38,7 @@ export default function Booking() { {dataStored === true && (

Ok, die Daten wurden für die nächste Buchung gespeichert.

)} +
{JSON.stringify(state.booking, null, 4)}