weddingsite/pages/api/group.js

101 lines
3.3 KiB
JavaScript
Raw Normal View History

2021-06-04 00:58:40 +00:00
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();
}
2021-06-04 00:58:40 +00:00
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 = guest?.dietaryNotes;
guestData.songRequests = 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,
});
res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
2021-06-04 00:58:40 +00:00
}
} 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;
}
});