@@ -2813,4 +2813,55 @@ export default class CalendarService {
28132813 nextPastCursor : pastSlots . length === 25 ? pastSlots [ pastSlots . length - 1 ] . startTime : null
28142814 } ;
28152815 }
2816+
2817+ static async getOrCreateIcsToken ( userId : string ) : Promise < string > {
2818+ const user = await prisma . user . findUnique ( { where : { userId } } ) ;
2819+ if ( ! user ) throw new NotFoundException ( 'User' , userId ) ;
2820+ if ( user . icsToken ) return user . icsToken ;
2821+
2822+ const token = crypto . randomUUID ( ) ;
2823+ await prisma . user . update ( { where : { userId } , data : { icsToken : token } } ) ;
2824+ return token ;
2825+ }
2826+
2827+ static async getIcsFeedEvents ( icsToken : string , organizationId : string , calendarIds : string [ ] ) {
2828+ const user = await prisma . user . findUnique ( {
2829+ where : { icsToken } ,
2830+ include : {
2831+ teamsAsMember : { select : { teamId : true } } ,
2832+ teamsAsLead : { select : { teamId : true } } ,
2833+ teamsAsHead : { select : { teamId : true } }
2834+ }
2835+ } ) ;
2836+
2837+ if ( ! user ) throw new NotFoundException ( 'User' , 'icsToken' ) ;
2838+
2839+ const userTeamIds = [
2840+ ...user . teamsAsMember . map ( ( t ) => t . teamId ) ,
2841+ ...user . teamsAsLead . map ( ( t ) => t . teamId ) ,
2842+ ...user . teamsAsHead . map ( ( t ) => t . teamId )
2843+ ] ;
2844+
2845+ const calendarFilter =
2846+ calendarIds . length > 0
2847+ ? [ { eventType : { calendars : { some : { calendarId : { in : calendarIds } , organizationId } } } } ]
2848+ : [ ] ;
2849+
2850+ const events = await prisma . event . findMany ( {
2851+ where : {
2852+ dateDeleted : null ,
2853+ status : { in : [ Event_Status . CONFIRMED , Event_Status . SCHEDULED , Event_Status . DONE ] } ,
2854+ scheduledTimes : { some : { } } ,
2855+ OR : [
2856+ { requiredMembers : { some : { userId : user . userId } } } ,
2857+ { optionalMembers : { some : { userId : user . userId } } } ,
2858+ ...( userTeamIds . length > 0 ? [ { teams : { some : { teamId : { in : userTeamIds } } } } ] : [ ] ) ,
2859+ ...calendarFilter
2860+ ]
2861+ } ,
2862+ ...getEventQueryArgs ( organizationId )
2863+ } ) ;
2864+
2865+ return events . map ( eventTransformer ) ;
2866+ }
28162867}
0 commit comments