mirror of
https://github.com/BradNut/weddingsite
synced 2025-09-08 17:40:36 +00:00
101 lines
3.4 KiB
JavaScript
101 lines
3.4 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.get('user');
|
|
|
|
if (!user?.isLoggedIn) {
|
|
res.status(401).end();
|
|
return;
|
|
}
|
|
|
|
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
|
|
// In production just await connectDB()
|
|
if (process.env.SITE_ENV !== 'TEST_SITE') {
|
|
await connectDb();
|
|
}
|
|
|
|
const response = {};
|
|
|
|
switch (method) {
|
|
case 'GET':
|
|
try {
|
|
const group = await Group.findById(id);
|
|
// console.log('group', group);
|
|
response.id = id;
|
|
const guestList = [];
|
|
for (const guestId of group?.guests) {
|
|
// console.log(JSON.stringify(guestId));
|
|
const guestData = await Guest.findById(guestId);
|
|
const guest = {
|
|
id: guestData.id,
|
|
firstName: guestData.firstName,
|
|
lastName: guestData.lastName,
|
|
role: guestData.role,
|
|
rsvpStatus: guestData.rsvpStatus || '',
|
|
dietaryNotes: guestData.dietaryNotes || '',
|
|
songRequests: guestData.songRequests || '',
|
|
};
|
|
guestList.push(guest);
|
|
}
|
|
response.guests = guestList;
|
|
response.note = group?.note || '';
|
|
// console.log('response', response);
|
|
res.status(200).json(JSON.stringify(response));
|
|
} catch (error) {
|
|
const { response: fetchResponse } = error;
|
|
res.status(fetchResponse?.status || 500).json(error.data);
|
|
}
|
|
break;
|
|
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) {
|
|
// console.log(`Updating ${guest.id} with status ${guest.rsvpStatus}`);
|
|
const guestData = await Guest.findById(guest.id);
|
|
const accepted = guest?.rsvpStatus === 'accepted';
|
|
guestData.rsvpStatus =
|
|
guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
|
|
guestData.dietaryNotes = escape(guest?.dietaryNotes);
|
|
guestData.songRequests = escape(guest?.songRequests);
|
|
guestData.plusOne =
|
|
(guestData?.hasPlusOne && guest?.plusOne && accepted) || false;
|
|
guestData.plusOneFirstName =
|
|
(guestData?.hasPlusOne && guest?.plusOneFirstName) || '';
|
|
guestData.plusOneLastName =
|
|
(guestData?.hasPlusOne && guest?.plusOneLastName) || '';
|
|
guestData.save();
|
|
}
|
|
await Group.findByIdAndUpdate(groupId, {
|
|
note: escape(note),
|
|
});
|
|
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;
|
|
}
|
|
});
|