diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts index a3c79e68bb..988ebee5b8 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts @@ -27,6 +27,7 @@ import { import { UserWithProfile } from "@/modules/users/users.repository"; import { Injectable, BadRequestException } from "@nestjs/common"; +import { slugify } from "@calcom/platform-libraries"; import { getApps, getUsersCredentialsIncludeServiceAccountKey } from "@calcom/platform-libraries/app-store"; import { validateCustomEventName, @@ -129,6 +130,7 @@ export class InputEventTypesService_2024_06_14 { useDestinationCalendarEmail, disableGuests, bookerActiveBookingsLimit, + slug, ...rest } = inputEventType; const confirmationPolicyTransformed = this.transformInputConfirmationPolicy(confirmationPolicy); @@ -144,6 +146,8 @@ export class InputEventTypesService_2024_06_14 { ? this.transformInputBookerActiveBookingsLimit(bookerActiveBookingsLimit) : {}; + const slugifiedSlug = slugify(slug); + const metadata: EventTypeMetadata = { bookerLayouts: this.transformInputBookerLayouts(bookerLayouts), requiresConfirmationThreshold: @@ -153,6 +157,7 @@ export class InputEventTypesService_2024_06_14 { const eventType = { ...rest, + slug: slugifiedSlug, length: lengthInMinutes, locations: locationsTransformed, bookingFields: this.transformInputBookingFields(effectiveBookingFields), @@ -209,6 +214,7 @@ export class InputEventTypesService_2024_06_14 { useDestinationCalendarEmail, disableGuests, bookerActiveBookingsLimit, + slug, ...rest } = inputEventType; const eventTypeDb = await this.eventTypesRepository.getEventTypeWithMetaData(eventTypeId); @@ -243,6 +249,7 @@ export class InputEventTypesService_2024_06_14 { const eventType = { ...rest, + ...(slug ? { slug: slugify(slug) } : {}), length: lengthInMinutes, locations: locations ? this.transformInputLocations(locations) : undefined, bookingFields: effectiveBookingFields diff --git a/apps/api/v2/src/modules/organizations/event-types/services/input.service.ts b/apps/api/v2/src/modules/organizations/event-types/services/input.service.ts index a757119b11..e2bc83df18 100644 --- a/apps/api/v2/src/modules/organizations/event-types/services/input.service.ts +++ b/apps/api/v2/src/modules/organizations/event-types/services/input.service.ts @@ -8,6 +8,7 @@ import { UsersRepository } from "@/modules/users/users.repository"; import { BadRequestException, Injectable, NotFoundException } from "@nestjs/common"; import { SchedulingType } from "@calcom/platform-libraries"; +import { slugify } from "@calcom/platform-libraries"; import { EventTypeMetadata } from "@calcom/platform-libraries/event-types"; import { CreateTeamEventTypeInput_2024_06_14, @@ -42,11 +43,13 @@ export class InputOrganizationsEventTypesService { teamId: number, inputEventType: CreateTeamEventTypeInput_2024_06_14 ) { + const slugifiedInputEventType = { ...inputEventType, slug: slugify(inputEventType.slug) }; + await this.validateInputLocations(teamId, inputEventType.locations); await this.validateHosts(teamId, inputEventType.hosts); - await this.validateTeamEventTypeSlug(teamId, inputEventType.slug); + await this.validateTeamEventTypeSlug(teamId, slugifiedInputEventType.slug); - const transformedBody = await this.transformInputCreateTeamEventType(teamId, inputEventType); + const transformedBody = await this.transformInputCreateTeamEventType(teamId, slugifiedInputEventType); await this.inputEventTypesService.validateEventTypeInputs({ seatsPerTimeSlot: transformedBody.seatsPerTimeSlot, @@ -75,13 +78,21 @@ export class InputOrganizationsEventTypesService { teamId: number, inputEventType: UpdateTeamEventTypeInput_2024_06_14 ) { + const slugifiedInputEventType = inputEventType.slug + ? { ...inputEventType, slug: slugify(inputEventType.slug) } + : inputEventType; + await this.validateInputLocations(teamId, inputEventType.locations); await this.validateHosts(teamId, inputEventType.hosts); - if (inputEventType.slug) { - await this.validateTeamEventTypeSlug(teamId, inputEventType.slug); + if (slugifiedInputEventType.slug) { + await this.validateTeamEventTypeSlug(teamId, slugifiedInputEventType.slug); } - const transformedBody = await this.transformInputUpdateTeamEventType(eventTypeId, teamId, inputEventType); + const transformedBody = await this.transformInputUpdateTeamEventType( + eventTypeId, + teamId, + slugifiedInputEventType + ); await this.inputEventTypesService.validateEventTypeInputs({ eventTypeId: eventTypeId,