weddingsite/pages/api/party.js

72 lines
2.5 KiB
JavaScript

import escape from 'escape-html';
import withSession from '../../lib/session';
import Group from '../../models/Group';
import Guest from '../../models/Guest';
import connectDb from '../../utils/db';
export default withSession(async (req, res) => {
const {
query: { id },
method,
body,
session,
} = req;
const { user } = session;
if (!user?.isLoggedIn) {
res.status(401).end();
return;
}
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
// In production just: const knex = await connectDb();
let knex;
if (process.env.SITE_ENV !== 'TEST_SITE') {
knex = await connectDb();
}
switch (method) {
case 'POST':
try {
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
if (process.env.SITE_ENV === 'TEST_SITE') {
console.log('DONE!');
res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
} else {
const { groupId, guests, note } = body;
for (const guest of guests) {
const guestData = await knex('guests')
.where({ id: guest.id })
.first();
const accepted = guest?.rsvpStatus === 'accepted';
guestData.rsvp_status =
guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
guestData.dietary_notes = escape(guest?.dietaryNotes);
guestData.song_requests = escape(guest?.songRequests);
guestData.plus_one =
(guestData?.has_plus_one && guest?.plusOne && accepted) || false;
guestData.plus_one_first_name =
(guestData?.has_plus_one && guest?.plusOneFirstName) || '';
guestData.plus_one_last_name =
(guestData?.has_plus_one && guest?.plusOneLastName) || '';
// console.log('guestData modified', guestData);
await knex('guests').where({ id: guest.id }).update(guestData);
}
const updateParty = { note: escape(note), rsvp_submitted: true };
await knex('party').where({ id: groupId }).update(updateParty);
res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
}
} catch (error) {
const { response: fetchResponse } = error;
console.error('error', error);
res
.status(fetchResponse?.status || 500)
.json({ message: 'Unable to RSVP Your Group' });
}
break;
default:
res.status(400).json({ message: 'Unable to RSVP Your Group' });
break;
}
});