From feff588603b83e2e799b3dd19892049f6c827771 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Thu, 3 Apr 2025 09:53:58 +0200 Subject: [PATCH] fix: v2 allow creating team events without hosts (#20520) * fix: v2 allow creating team events without hosts * chore: remove log --- .../assign-all-team-members.e2e-spec.ts | 14 +++++++-- .../event-types/services/input.service.ts | 7 ----- .../inputs/create-event-type.input.ts | 29 ------------------- 3 files changed, 12 insertions(+), 38 deletions(-) diff --git a/apps/api/v2/src/modules/organizations/event-types/assign-all-team-members.e2e-spec.ts b/apps/api/v2/src/modules/organizations/event-types/assign-all-team-members.e2e-spec.ts index 57690f6f4f..a716e4398b 100644 --- a/apps/api/v2/src/modules/organizations/event-types/assign-all-team-members.e2e-spec.ts +++ b/apps/api/v2/src/modules/organizations/event-types/assign-all-team-members.e2e-spec.ts @@ -264,7 +264,7 @@ describe("Assign all team members", () => { }); describe("should setup event types using assignAllTeamMembers true", () => { - it("should not be able to setup team event type if no hosts nor assignAllTeamMembers provided", async () => { + it("should be able to setup team event type if no hosts nor assignAllTeamMembers provided", async () => { const body: CreateTeamEventTypeInput_2024_06_14 = { title: "Coding consultation round robin", slug: `organizations-event-types-round-robin-${randomString()}`, @@ -279,7 +279,17 @@ describe("Assign all team members", () => { .send(body) .set(X_CAL_SECRET_KEY, oAuthClient.secret) .set(X_CAL_CLIENT_ID, oAuthClient.id) - .expect(400); + .expect(201); + + const responseBody: ApiSuccessResponse = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + + const data = responseBody.data; + expect(data.title).toEqual(body.title); + expect(data.hosts).toEqual([]); + expect(data.schedulingType).toEqual("collective"); + const eventTypeHosts = await hostsRepositoryFixture.getEventTypeHosts(data.id); + expect(eventTypeHosts.length).toEqual(0); }); it("should setup collective event type assignAllTeamMembers true", async () => { 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 e4bb11abdd..76de368874 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 @@ -108,13 +108,6 @@ export class InputOrganizationsEventTypesService { teamId: number, inputEventType: CreateTeamEventTypeInput_2024_06_14 ) { - const hasHosts = !!inputEventType.hosts && !!inputEventType.hosts.length; - const hasAssignAllTeamMembers = inputEventType.assignAllTeamMembers === true; - - if (!hasHosts && !hasAssignAllTeamMembers) { - throw new BadRequestException("Either hosts must be provided or assignAllTeamMembers must be true"); - } - const { hosts, assignAllTeamMembers, locations, ...rest } = inputEventType; const eventType = this.inputEventTypesService.transformInputCreateEventType(rest); diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts index dc3f793128..be7db511ef 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts @@ -5,7 +5,6 @@ import { ApiExtraModels, } from "@nestjs/swagger"; import { Type, Transform, Expose } from "class-transformer"; -import type { ValidationOptions, ValidationArguments } from "class-validator"; import { IsString, IsInt, @@ -18,7 +17,6 @@ import { ValidateNested, ArrayNotEmpty, ArrayUnique, - registerDecorator, } from "class-validator"; import { SchedulingType } from "@calcom/platform-enums"; @@ -447,33 +445,6 @@ export class Host { @DocsPropertyOptional({ enum: HostPriority }) priority?: keyof typeof HostPriority = "medium"; } - -function RequireHostsOrAssignAllMembers(validationOptions?: ValidationOptions) { - return function (object: any) { - registerDecorator({ - name: "requireHostsOrAssignAllMembers", - target: object, - propertyName: "hosts OR assignAllTeamMembers", - options: validationOptions, - constraints: [], - validator: { - validate(_value: any, args: ValidationArguments) { - const obj = args.object as CreateTeamEventTypeInput_2024_06_14; - - const hasHosts = !!obj.hosts && !!obj.hosts.length; - const hasAssignAllTeamMembers = obj.assignAllTeamMembers === true; - - return hasHosts || hasAssignAllTeamMembers; - }, - defaultMessage(): string { - return "Either hosts OR assignAllTeamMembers set to true is required"; - }, - }, - }); - }; -} - -@RequireHostsOrAssignAllMembers() export class CreateTeamEventTypeInput_2024_06_14 extends BaseCreateEventTypeInput { @Transform(({ value }) => { if (value === "collective") {