@@ -200,7 +200,7 @@ export const updateEvent = async (eventId: string, data: {
200200 }
201201} ;
202202
203- export const getAllUserEvents = async ( userId : string ) => {
203+ export const getAllUserEvents = async ( userId : string , filter ?: 'hosted' | 'invited' ) => {
204204 try {
205205 // Get events where user is host
206206 const hostedEvents = await prisma . event . findMany ( {
@@ -283,6 +283,103 @@ export const getAllUserEvents = async (userId: string) => {
283283 return acc ;
284284 } , [ ] as ( typeof eventsWithRoles ) [ 0 ] [ ] ) ;
285285
286+ // Filter based on parameter if provided
287+ let filteredEvents = uniqueEvents ;
288+ if ( filter === 'hosted' ) {
289+ filteredEvents = uniqueEvents . filter ( event =>
290+ event . userRole === 'host' || event . userRole === 'cohost'
291+ ) ;
292+ } else if ( filter === 'invited' ) {
293+ filteredEvents = uniqueEvents . filter ( event =>
294+ event . userRole === 'guest'
295+ ) ;
296+ }
297+
298+ // Sort by creation date (newest first)
299+ filteredEvents . sort ( ( a , b ) => new Date ( b . created_at ) . getTime ( ) - new Date ( a . created_at ) . getTime ( ) ) ;
300+
301+ return {
302+ success : true ,
303+ events : filteredEvents
304+ } ;
305+ } catch ( error : unknown ) {
306+ if ( error instanceof Error ) {
307+ return {
308+ success : false ,
309+ error : error . message ,
310+ } ;
311+ } else {
312+ return {
313+ success : false ,
314+ error : "Failed to fetch events" ,
315+ } ;
316+ }
317+ }
318+ } ;
319+
320+ // Get events where user is host or co-host
321+ export const getHostedEvents = async ( userId : string ) => {
322+ try {
323+ // Get events where user is host
324+ const hostedEvents = await prisma . event . findMany ( {
325+ where : { hostId : userId } ,
326+ include : {
327+ host : true ,
328+ co_hosts : true ,
329+ weddingDetails : true ,
330+ birthdayDetails : true ,
331+ housePartyDetails : true ,
332+ travelDetails : true ,
333+ corporateDetails : true ,
334+ collegeDetails : true ,
335+ otherDetails : true ,
336+ }
337+ } ) ;
338+
339+ // Get events where user is co-host
340+ const coHostedEvents = await prisma . event . findMany ( {
341+ where : {
342+ co_hosts : {
343+ some : { id : userId }
344+ }
345+ } ,
346+ include : {
347+ host : true ,
348+ co_hosts : true ,
349+ weddingDetails : true ,
350+ birthdayDetails : true ,
351+ housePartyDetails : true ,
352+ travelDetails : true ,
353+ corporateDetails : true ,
354+ collegeDetails : true ,
355+ otherDetails : true ,
356+ }
357+ } ) ;
358+
359+ // Format events with roles
360+ const eventsWithRoles = [
361+ ...hostedEvents . map ( event => ( { ...event , userRole : 'host' as const } ) ) ,
362+ ...coHostedEvents . map ( event => ( { ...event , userRole : 'cohost' as const } ) )
363+ ] ;
364+
365+ // Remove duplicates (in case user is both host and cohost)
366+ const uniqueEvents = eventsWithRoles . reduce ( ( acc , current ) => {
367+ const existingEvent = acc . find ( event => event . id === current . id ) ;
368+
369+ if ( ! existingEvent ) {
370+ acc . push ( current ) ;
371+ } else {
372+ // If event exists, prioritize role hierarchy: host > cohost
373+ const rolePriority = { host : 2 , cohost : 1 } ;
374+ if ( rolePriority [ current . userRole ] > rolePriority [ existingEvent . userRole ] ) {
375+ const index = acc . findIndex ( event => event . id === current . id ) ;
376+ acc [ index ] = current ;
377+ }
378+ }
379+
380+ return acc ;
381+ } , [ ] as ( typeof eventsWithRoles ) [ 0 ] [ ] ) ;
382+
286383 // Sort by creation date (newest first)
287384 uniqueEvents . sort ( ( a , b ) => new Date ( b . created_at ) . getTime ( ) - new Date ( a . created_at ) . getTime ( ) ) ;
288385
@@ -299,7 +396,64 @@ export const getAllUserEvents = async (userId: string) => {
299396 } else {
300397 return {
301398 success : false ,
302- error : "Failed to fetch events" ,
399+ error : "Failed to fetch hosted events" ,
400+ } ;
401+ }
402+ }
403+ } ;
404+
405+ // Get events where user is only an invitee (not host or co-host)
406+ export const getInvitedEvents = async ( userId : string ) => {
407+ try {
408+ // Get events where user is a guest but NOT host or co-host
409+ const guestEvents = await prisma . event . findMany ( {
410+ where : {
411+ guests : {
412+ some : { user_id : userId }
413+ } ,
414+ // Exclude events where user is host
415+ hostId : { not : userId } ,
416+ // Exclude events where user is co-host
417+ co_hosts : {
418+ none : { id : userId }
419+ }
420+ } ,
421+ include : {
422+ host : true ,
423+ co_hosts : true ,
424+ weddingDetails : true ,
425+ birthdayDetails : true ,
426+ housePartyDetails : true ,
427+ travelDetails : true ,
428+ corporateDetails : true ,
429+ collegeDetails : true ,
430+ otherDetails : true ,
431+ }
432+ } ) ;
433+
434+ // Format events with guest role
435+ const eventsWithRoles = guestEvents . map ( event => ( {
436+ ...event ,
437+ userRole : 'guest' as const
438+ } ) ) ;
439+
440+ // Sort by creation date (newest first)
441+ eventsWithRoles . sort ( ( a , b ) => new Date ( b . created_at ) . getTime ( ) - new Date ( a . created_at ) . getTime ( ) ) ;
442+
443+ return {
444+ success : true ,
445+ events : eventsWithRoles
446+ } ;
447+ } catch ( error : unknown ) {
448+ if ( error instanceof Error ) {
449+ return {
450+ success : false ,
451+ error : error . message ,
452+ } ;
453+ } else {
454+ return {
455+ success : false ,
456+ error : "Failed to fetch invited events" ,
303457 } ;
304458 }
305459 }
0 commit comments