diff --git a/apps/api/v2/src/modules/organizations/controllers/dwd/dwd.controller.ts b/apps/api/v2/src/modules/organizations/controllers/dwd/dwd.controller.ts new file mode 100644 index 00000000000000..69b9608b2e7662 --- /dev/null +++ b/apps/api/v2/src/modules/organizations/controllers/dwd/dwd.controller.ts @@ -0,0 +1,78 @@ +import { API_VERSIONS_VALUES } from "@/lib/api-versions"; +import { PlatformPlan } from "@/modules/auth/decorators/billing/platform-plan.decorator"; +import { GetUser } from "@/modules/auth/decorators/get-user/get-user.decorator"; +import { Roles } from "@/modules/auth/decorators/roles/roles.decorator"; +import { ApiAuthGuard } from "@/modules/auth/guards/api-auth/api-auth.guard"; +import { PlatformPlanGuard } from "@/modules/auth/guards/billing/platform-plan.guard"; +import { IsMembershipInOrg } from "@/modules/auth/guards/memberships/is-membership-in-org.guard"; +import { IsAdminAPIEnabledGuard } from "@/modules/auth/guards/organizations/is-admin-api-enabled.guard"; +import { IsOrgGuard } from "@/modules/auth/guards/organizations/is-org.guard"; +import { RolesGuard } from "@/modules/auth/guards/roles/roles.guard"; +import { CreateOrgMembershipDto } from "@/modules/organizations/inputs/create-organization-membership.input"; +import { UpdateOrgMembershipDto } from "@/modules/organizations/inputs/update-organization-membership.input"; +import { CreateOrgMembershipOutput } from "@/modules/organizations/outputs/organization-membership/create-membership.output"; +import { DeleteOrgMembership } from "@/modules/organizations/outputs/organization-membership/delete-membership.output"; +import { GetAllOrgMemberships } from "@/modules/organizations/outputs/organization-membership/get-all-memberships.output"; +import { GetOrgMembership } from "@/modules/organizations/outputs/organization-membership/get-membership.output"; +import { OrgMembershipOutputDto } from "@/modules/organizations/outputs/organization-membership/membership.output"; +import { UpdateOrgMembership } from "@/modules/organizations/outputs/organization-membership/update-membership.output"; +import { OrganizationsMembershipService } from "@/modules/organizations/services/organizations-membership.service"; +import { + Controller, + UseGuards, + Get, + Param, + ParseIntPipe, + Query, + Delete, + Patch, + Post, + Body, + HttpCode, + HttpStatus, +} from "@nestjs/common"; +import { ApiOperation, ApiTags as DocsTags } from "@nestjs/swagger"; +import { User } from "@prisma/client"; +import { plainToClass } from "class-transformer"; + +import { SUCCESS_STATUS } from "@calcom/platform-constants"; +import { addDwd } from "@calcom/platform-libraries"; + +@Controller({ + path: "/v2/organizations/:orgId/dwd", + version: API_VERSIONS_VALUES, +}) +@UseGuards(ApiAuthGuard, IsOrgGuard, RolesGuard, PlatformPlanGuard, IsAdminAPIEnabledGuard) +@DocsTags("Orgs / dwd") +export class OrganizationsDWDController { + @Post("/") + @HttpCode(HttpStatus.CREATED) + @Roles("ORG_ADMIN") + @PlatformPlan("ESSENTIALS") + @ApiOperation({ summary: "Create a dwd" }) + async createDwd( + @Param("orgId", ParseIntPipe) orgId: number, + @GetUser() user: User, + @Body() + body: { + workspacePlatformSlug: string; + domain: string; + serviceAccountKey: { + private_key: string; + client_email: string; + client_id: string; + }; + } + ): Promise { + console.log( + "BODY", + body?.domain, + body?.workspacePlatformSlug, + typeof body?.serviceAccountKey, + typeof body?.serviceAccountKey + ); + const res = await addDwd({ input: body, ctx: { user: { id: user.id, organizationId: orgId } } }); + console.log("ADDED DWD", res); + return "success"; + } +} diff --git a/apps/api/v2/src/modules/organizations/organizations.module.ts b/apps/api/v2/src/modules/organizations/organizations.module.ts index 4991f1e9acaaee..7a3dad792a15b4 100644 --- a/apps/api/v2/src/modules/organizations/organizations.module.ts +++ b/apps/api/v2/src/modules/organizations/organizations.module.ts @@ -7,6 +7,7 @@ import { UserOOORepository } from "@/modules/ooo/repositories/ooo.repository"; import { UserOOOService } from "@/modules/ooo/services/ooo.service"; import { OrganizationsOptionsAttributesController } from "@/modules/organizations/controllers/attributes/organizations-attributes-options.controller"; import { OrganizationsAttributesController } from "@/modules/organizations/controllers/attributes/organizations-attributes.controller"; +import { OrganizationsDWDController } from "@/modules/organizations/controllers/dwd/dwd.controller"; import { OrganizationsEventTypesController } from "@/modules/organizations/controllers/event-types/organizations-event-types.controller"; import { OrganizationsMembershipsController } from "@/modules/organizations/controllers/memberships/organizations-membership.controller"; import { OutputTeamEventTypesResponsePipe } from "@/modules/organizations/controllers/pipes/event-types/team-event-types-response.transformer"; @@ -128,6 +129,7 @@ import { Module } from "@nestjs/common"; OrganizationsWebhooksController, OrganizationsTeamsSchedulesController, OrganizationsUsersOOOController, + OrganizationsDWDController, ], }) export class OrganizationsModule {} diff --git a/packages/platform/libraries/index.ts b/packages/platform/libraries/index.ts index a7ee419dd8f27b..e88976a603379d 100644 --- a/packages/platform/libraries/index.ts +++ b/packages/platform/libraries/index.ts @@ -53,6 +53,7 @@ import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/crede import { paymentDataSelect } from "@calcom/prisma/selects/payment"; import type { TeamQuery } from "@calcom/trpc/server/routers/loggedInViewer/integrations.handler"; import { updateHandler as updateScheduleHandler } from "@calcom/trpc/server/routers/viewer/availability/schedule/update.handler"; +import addDwd from "@calcom/trpc/server/routers/viewer/domainWideDelegation/add.handler"; import { getAvailableSlots } from "@calcom/trpc/server/routers/viewer/slots/util"; import { createNewUsersConnectToOrgIfExists, @@ -268,3 +269,5 @@ export { getBookingFieldsWithSystemFields }; export { getRoutedUrl }; export { getTeamMemberEmailForResponseOrContactUsingUrlQuery }; + +export { addDwd };