@@ -121,7 +121,7 @@ export class InputOrganizationsEventTypesService {
121
121
} ,
122
122
] ;
123
123
124
- const children = await this . getChildEventTypesForManagedEventType ( null , inputEventType , teamId ) ;
124
+ const children = await this . getChildEventTypesForManagedEventTypeCreate ( inputEventType , teamId ) ;
125
125
126
126
const metadata =
127
127
rest . schedulingType === "MANAGED"
@@ -159,7 +159,11 @@ export class InputOrganizationsEventTypesService {
159
159
throw new BadRequestException ( "Event type to update not found" ) ;
160
160
}
161
161
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
+
163
167
const teamEventType = {
164
168
...eventType ,
165
169
// 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 {
176
180
return teamEventType ;
177
181
}
178
182
179
- async getChildEventTypesForManagedEventType (
180
- eventTypeId : number | null ,
183
+ async getChildEventTypesForManagedEventTypeUpdate (
184
+ eventTypeId : number ,
181
185
inputEventType : UpdateTeamEventTypeInput_2024_06_14 ,
182
186
teamId : number
183
187
) {
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 ;
190
191
}
191
192
192
- const ownersIds = await this . getOwnersIdsForManagedEventType ( teamId , inputEventType , eventType ) ;
193
+ const ownersIds = await this . getOwnersIdsForManagedEventTypeUpdate ( teamId , inputEventType , eventType ) ;
193
194
const owners = await this . getOwnersForManagedEventType ( ownersIds ) ;
194
195
195
196
return owners . map ( ( owner ) => {
@@ -200,22 +201,58 @@ export class InputOrganizationsEventTypesService {
200
201
} ) ;
201
202
}
202
203
203
- async getOwnersIdsForManagedEventType (
204
+ async getOwnersIdsForManagedEventTypeUpdate (
204
205
teamId : number ,
205
206
inputEventType : UpdateTeamEventTypeInput_2024_06_14 ,
206
- eventType : { children : { userId : number | null } [ ] } | null
207
+ eventType : { children : { userId : number | null } [ ] }
207
208
) {
208
209
if ( inputEventType . assignAllTeamMembers ) {
209
210
return await this . getTeamUsersIds ( teamId ) ;
210
211
}
211
212
212
- // note(Lauris): when API user updates managed event type users
213
213
if ( inputEventType . hosts ) {
214
214
return inputEventType . hosts . map ( ( host ) => host . userId ) ;
215
215
}
216
216
217
217
// 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 [ ] ;
219
256
}
220
257
221
258
async getTeamUsersIds ( teamId : number ) {
@@ -234,7 +271,7 @@ export class InputOrganizationsEventTypesService {
234
271
}
235
272
236
273
async getOwnersForManagedEventType ( userIds : number [ ] ) {
237
- const users = await this . usersRepository . findByIdsWithEventTypes ( userIds ) ;
274
+ const users = userIds . length ? await this . usersRepository . findByIdsWithEventTypes ( userIds ) : [ ] ;
238
275
239
276
return users . map ( ( user ) => {
240
277
const nonManagedEventTypes = user . eventTypes . filter ( ( eventType ) => ! eventType . parentId ) ;
0 commit comments