Skip to content

Commit 5f18684

Browse files
committed
merged event details route and rsvp pref
1 parent 9e50f2d commit 5f18684

File tree

1 file changed

+60
-63
lines changed

1 file changed

+60
-63
lines changed

src/routes/inviteRoutes.ts

Lines changed: 60 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -326,19 +326,70 @@ router.get('/:eventId/:groupId', optionalAuth, async (req: Request, res: Respons
326326
const { eventId, groupId } = req.params;
327327
const userId = req.userId; // Will be undefined if not authenticated
328328

329-
const result = await getGroupInviteDetails(eventId, groupId, userId);
330-
331-
if (!result.success) {
332-
res.status(404).json({ message: result.error });
329+
// Get both group invite details and RSVP preferences in parallel
330+
const [groupDetailsResult, rsvpPreferencesResult] = await Promise.all([
331+
getGroupInviteDetails(eventId, groupId, userId),
332+
getRsvpPreferencesForGroup(eventId, groupId)
333+
]);
334+
335+
if (!groupDetailsResult.success) {
336+
res.status(404).json({ message: groupDetailsResult.error });
333337
return;
334338
}
335339

336-
res.status(200).json({
337-
group: result.group,
338-
event: result.event,
339-
userContext: result.userContext, // Additional info for logged-in users
340+
// Prepare response with group details
341+
const response: any = {
342+
group: groupDetailsResult.group,
343+
event: groupDetailsResult.event,
344+
userContext: groupDetailsResult.userContext, // Additional info for logged-in users
340345
isAuthenticated: !!userId
341-
});
346+
};
347+
348+
// Add RSVP preferences if available
349+
if (rsvpPreferencesResult.success && rsvpPreferencesResult.preferences) {
350+
const preferences = rsvpPreferencesResult.preferences;
351+
response.rsvpPreferences = {
352+
formConfig: {
353+
collectAttendance: preferences.collect_attendance,
354+
collectGuestCount: preferences.collect_guest_count,
355+
collectFood: preferences.collect_food,
356+
collectAlcohol: preferences.collect_alcohol,
357+
collectAccommodation: preferences.collect_accommodation,
358+
accommodationDetails: preferences.accommodation_details,
359+
collectTransport: preferences.collect_transport,
360+
transportDetails: preferences.transport_details,
361+
additionalNotes: preferences.additional_notes,
362+
isRsvpAllowed: preferences.isRsvpAllowed,
363+
rsvpLockDate: preferences.rsvp_lock_date,
364+
daysUntilLock: preferences.daysUntilLock
365+
},
366+
group: preferences.group ? {
367+
id: preferences.group.id,
368+
name: preferences.group.name
369+
} : null
370+
};
371+
} else {
372+
// If no RSVP preferences found, set defaults
373+
response.rsvpPreferences = {
374+
formConfig: {
375+
collectAttendance: true,
376+
collectGuestCount: true,
377+
collectFood: false,
378+
collectAlcohol: false,
379+
collectAccommodation: false,
380+
accommodationDetails: null,
381+
collectTransport: false,
382+
transportDetails: null,
383+
additionalNotes: null,
384+
isRsvpAllowed: true,
385+
rsvpLockDate: null,
386+
daysUntilLock: null
387+
},
388+
group: null
389+
};
390+
}
391+
392+
res.status(200).json(response);
342393
} catch (error) {
343394
console.error(error);
344395
res.status(500).json({ message: 'Internal Server Error' });
@@ -407,59 +458,5 @@ router.get('/:eventId/:groupId/status/:phoneNo', async (_req: Request, res: Resp
407458
res.status(403).json({ message: 'RSVP status can be viewed and managed in the app. Please download the app to continue.' });
408459
});
409460

410-
router.get('/:eventId/:groupId/preferences', async (req: Request, res: Response) => {
411-
try {
412-
const { eventId, groupId } = req.params;
413-
414-
const result = await getRsvpPreferencesForGroup(eventId, groupId);
415-
416-
if (!result.success) {
417-
if (result.error?.includes('not found')) {
418-
res.status(404).json({ message: result.error });
419-
} else {
420-
res.status(400).json({ message: result.error });
421-
}
422-
return;
423-
}
424-
425-
// Only return the preferences data needed for form generation
426-
const preferences = result.preferences;
427-
if (!preferences) {
428-
res.status(404).json({ message: 'RSVP preferences not found' });
429-
return;
430-
}
431-
432-
res.status(200).json({
433-
eventId,
434-
groupId,
435-
formConfig: {
436-
collectAttendance: preferences.collect_attendance,
437-
collectGuestCount: preferences.collect_guest_count,
438-
collectFood: preferences.collect_food,
439-
collectAlcohol: preferences.collect_alcohol,
440-
collectAccommodation: preferences.collect_accommodation,
441-
accommodationDetails: preferences.accommodation_details,
442-
collectTransport: preferences.collect_transport,
443-
transportDetails: preferences.transport_details,
444-
additionalNotes: preferences.additional_notes,
445-
isRsvpAllowed: preferences.isRsvpAllowed,
446-
rsvpLockDate: preferences.rsvp_lock_date,
447-
daysUntilLock: preferences.daysUntilLock
448-
},
449-
event: {
450-
id: preferences.event.id,
451-
title: preferences.event.title,
452-
startDateTime: preferences.event.start_date_time
453-
},
454-
group: preferences.group ? {
455-
id: preferences.group.id,
456-
name: preferences.group.name
457-
} : null
458-
});
459-
} catch (error) {
460-
console.error('Get RSVP preferences error:', error);
461-
res.status(500).json({ message: 'Internal Server Error' });
462-
}
463-
});
464461

465462
export default router;

0 commit comments

Comments
 (0)