@@ -121,7 +121,7 @@ export class InputOrganizationsEventTypesService {
121121 } ,
122122 ] ;
123123
124- const children = await this . getChildEventTypesForManagedEventType ( null , inputEventType , teamId ) ;
124+ const children = await this . getChildEventTypesForManagedEventTypeCreate ( inputEventType , teamId ) ;
125125
126126 const metadata =
127127 rest . schedulingType === "MANAGED"
@@ -159,7 +159,11 @@ export class InputOrganizationsEventTypesService {
159159 throw new BadRequestException ( "Event type to update not found" ) ;
160160 }
161161
162- const children = await this . getChildEventTypesForManagedEventType ( eventTypeId , inputEventType , teamId ) ;
162+ const children =
163+ dbEventType . schedulingType === "MANAGED"
164+ ? await this . getChildEventTypesForManagedEventTypeUpdate ( eventTypeId , inputEventType , teamId )
165+ : undefined ;
166+
163167 const teamEventType = {
164168 ...eventType ,
165169 // note(Lauris): we don't populate hosts for managed event-types because they are handled by the children
@@ -176,20 +180,17 @@ export class InputOrganizationsEventTypesService {
176180 return teamEventType ;
177181 }
178182
179- async getChildEventTypesForManagedEventType (
180- eventTypeId : number | null ,
183+ async getChildEventTypesForManagedEventTypeUpdate (
184+ eventTypeId : number ,
181185 inputEventType : UpdateTeamEventTypeInput_2024_06_14 ,
182186 teamId : number
183187 ) {
184- let eventType = null ;
185- if ( eventTypeId ) {
186- eventType = await this . teamsEventTypesRepository . getEventTypeByIdWithChildren ( eventTypeId ) ;
187- if ( ! eventType || eventType . schedulingType !== "MANAGED" ) {
188- return undefined ;
189- }
188+ const eventType = await this . teamsEventTypesRepository . getEventTypeByIdWithChildren ( eventTypeId ) ;
189+ if ( ! eventType || eventType . schedulingType !== "MANAGED" ) {
190+ return undefined ;
190191 }
191192
192- const ownersIds = await this . getOwnersIdsForManagedEventType ( teamId , inputEventType , eventType ) ;
193+ const ownersIds = await this . getOwnersIdsForManagedEventTypeUpdate ( teamId , inputEventType , eventType ) ;
193194 const owners = await this . getOwnersForManagedEventType ( ownersIds ) ;
194195
195196 return owners . map ( ( owner ) => {
@@ -200,22 +201,58 @@ export class InputOrganizationsEventTypesService {
200201 } ) ;
201202 }
202203
203- async getOwnersIdsForManagedEventType (
204+ async getOwnersIdsForManagedEventTypeUpdate (
204205 teamId : number ,
205206 inputEventType : UpdateTeamEventTypeInput_2024_06_14 ,
206- eventType : { children : { userId : number | null } [ ] } | null
207+ eventType : { children : { userId : number | null } [ ] }
207208 ) {
208209 if ( inputEventType . assignAllTeamMembers ) {
209210 return await this . getTeamUsersIds ( teamId ) ;
210211 }
211212
212- // note(Lauris): when API user updates managed event type users
213213 if ( inputEventType . hosts ) {
214214 return inputEventType . hosts . map ( ( host ) => host . userId ) ;
215215 }
216216
217217 // note(Lauris): when API user DOES NOT update managed event type users, but we still need existing managed event type users to know which event-types to update
218- return eventType ?. children . map ( ( child ) => child . userId ) . filter ( ( id ) => ! ! id ) as number [ ] ;
218+ // e.g if managed event type title is changed then all children managed event types should be updated as well.
219+ const childrenOwnersIds : number [ ] = [ ] ;
220+ for ( const child of eventType . children ) {
221+ if ( child . userId ) {
222+ childrenOwnersIds . push ( child . userId ) ;
223+ }
224+ }
225+ return childrenOwnersIds ;
226+ }
227+
228+ async getChildEventTypesForManagedEventTypeCreate (
229+ inputEventType : UpdateTeamEventTypeInput_2024_06_14 ,
230+ teamId : number
231+ ) {
232+ const ownersIds = await this . getOwnersIdsForManagedEventTypeCreate ( teamId , inputEventType ) ;
233+ const owners = await this . getOwnersForManagedEventType ( ownersIds ) ;
234+
235+ return owners . map ( ( owner ) => {
236+ return {
237+ hidden : false ,
238+ owner,
239+ } ;
240+ } ) ;
241+ }
242+
243+ async getOwnersIdsForManagedEventTypeCreate (
244+ teamId : number ,
245+ inputEventType : UpdateTeamEventTypeInput_2024_06_14
246+ ) {
247+ if ( inputEventType . assignAllTeamMembers ) {
248+ return await this . getTeamUsersIds ( teamId ) ;
249+ }
250+
251+ if ( inputEventType . hosts ) {
252+ return inputEventType . hosts . map ( ( host ) => host . userId ) ;
253+ }
254+
255+ return [ ] ;
219256 }
220257
221258 async getTeamUsersIds ( teamId : number ) {
@@ -234,7 +271,7 @@ export class InputOrganizationsEventTypesService {
234271 }
235272
236273 async getOwnersForManagedEventType ( userIds : number [ ] ) {
237- const users = await this . usersRepository . findByIdsWithEventTypes ( userIds ) ;
274+ const users = userIds . length ? await this . usersRepository . findByIdsWithEventTypes ( userIds ) : [ ] ;
238275
239276 return users . map ( ( user ) => {
240277 const nonManagedEventTypes = user . eventTypes . filter ( ( eventType ) => ! eventType . parentId ) ;
0 commit comments