@@ -21,7 +21,7 @@ export class SharedRoutingFormResponseService {
2121 private readonly slotsService : SlotsService_2024_09_04 ,
2222 private readonly teamsEventTypesRepository : TeamsEventTypesRepository ,
2323 private readonly eventTypesRepository : EventTypesRepository_2024_06_14
24- ) { }
24+ ) { }
2525
2626 async createRoutingFormResponseWithSlots (
2727 routingFormId : string ,
@@ -153,8 +153,24 @@ export class SharedRoutingFormResponseService {
153153 }
154154
155155 private async extractEventTypeAndCrmParams ( userId : number , routingUrl : URL ) {
156- // Extract team and event type information
157- // TODO: Route action also has eventTypeId directly now and instead of using this brittle approach for getting event type by slug, we should get by eventTypeId
156+ const urlParams = routingUrl . searchParams ;
157+
158+ // Prefer direct eventTypeId lookup if available (more reliable than slug-based)
159+ const eventTypeIdParam = urlParams . get ( "cal.eventTypeId" ) ;
160+ if ( eventTypeIdParam ) {
161+ const eventTypeId = parseInt ( eventTypeIdParam , 10 ) ;
162+ if ( ! isNaN ( eventTypeId ) ) {
163+ const eventType = await this . eventTypesRepository . getEventTypeById ( eventTypeId ) ;
164+ if ( eventType ?. id ) {
165+ return {
166+ eventTypeId : eventType . id ,
167+ crmParams : this . extractCrmParamsFromUrl ( urlParams ) ,
168+ } ;
169+ }
170+ }
171+ }
172+
173+ // Fall back to slug-based lookup for backward compatibility
158174 const { teamId, eventTypeSlug } = this . extractTeamIdAndEventTypeSlugFromRedirectUrl ( routingUrl ) ;
159175 const eventType = teamId
160176 ? await this . teamsEventTypesRepository . getEventTypeByTeamIdAndSlug ( teamId , eventTypeSlug )
@@ -167,15 +183,20 @@ export class SharedRoutingFormResponseService {
167183 ) ;
168184 }
169185
170- // Extract CRM parameters from URL
171- const urlParams = routingUrl . searchParams ;
172- const crmParams = {
186+ return {
187+ eventTypeId : eventType . id ,
188+ crmParams : this . extractCrmParamsFromUrl ( routingUrl . searchParams ) ,
189+ } ;
190+ }
191+
192+ private extractCrmParamsFromUrl ( urlParams : URLSearchParams ) {
193+ return {
173194 teamMemberEmail : urlParams . get ( "cal.crmContactOwnerEmail" ) || undefined ,
174195 routedTeamMemberIds : urlParams . get ( "cal.routedTeamMemberIds" )
175196 ? urlParams
176- . get ( "cal.routedTeamMemberIds" ) !
177- . split ( "," )
178- . map ( ( id ) => parseInt ( id ) )
197+ . get ( "cal.routedTeamMemberIds" ) !
198+ . split ( "," )
199+ . map ( ( id ) => parseInt ( id ) )
179200 : undefined ,
180201 routingFormResponseId : urlParams . get ( "cal.routingFormResponseId" )
181202 ? parseInt ( urlParams . get ( "cal.routingFormResponseId" ) ! )
@@ -187,11 +208,6 @@ export class SharedRoutingFormResponseService {
187208 crmAppSlug : urlParams . get ( "cal.crmAppSlug" ) || undefined ,
188209 crmOwnerRecordType : urlParams . get ( "cal.crmContactOwnerRecordType" ) || undefined ,
189210 } ;
190-
191- return {
192- eventTypeId : eventType . id ,
193- crmParams,
194- } ;
195211 }
196212
197213 private isEventTypeRedirectUrl ( routingUrl : URL ) {
0 commit comments