@@ -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
465462export default router ;
0 commit comments