From 277ce1c2440ac5a0a61e85122629bcdb317d1ae1 Mon Sep 17 00:00:00 2001 From: Rajiv Sahal Date: Mon, 10 Mar 2025 16:03:29 +0530 Subject: [PATCH] refactor: extract slots from libraries barrel file (#19895) * refactor: extract slots fn from libraries barrel file * bump platform libs --------- Co-authored-by: Morgan Vernay --- apps/api/v2/package.json | 2 +- .../controllers/slots.controller.ts | 6 +++--- .../services/slots-output.service.ts | 2 +- .../services/slots-input.service.ts | 9 +++++++-- .../services/slots.service.ts | 2 +- apps/api/v2/tsconfig.json | 3 ++- packages/lib/event-types/getEventTypeById.ts | 2 +- packages/platform/libraries/index.ts | 6 ++---- packages/platform/libraries/package.json | 19 +++++++++++++++++++ packages/platform/libraries/slots.ts | 4 ++++ packages/platform/libraries/vite.config.js | 5 ++++- 11 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 packages/platform/libraries/slots.ts diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index 3ae14b998f..1745247e8f 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -32,7 +32,7 @@ "@axiomhq/winston": "^1.2.0", "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.127", + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.140", "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", diff --git a/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts index 56e9e29fbe..d8d2f20e06 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts @@ -1,4 +1,5 @@ import { SlotsOutputService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots-output.service"; +import type { RangeSlots, TimeSlots } from "@/modules/slots/slots-2024-04-15/services/slots-output.service"; import { SlotsService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots.service"; import { Query, Body, Controller, Get, Delete, Post, Req, Res } from "@nestjs/common"; import { ApiExcludeController as DocsExcludeController } from "@nestjs/swagger"; @@ -12,8 +13,7 @@ import { VERSION_2024_06_11, VERSION_2024_08_13, } from "@calcom/platform-constants"; -import { getAvailableSlots } from "@calcom/platform-libraries"; -import type { AvailableSlotsType } from "@calcom/platform-libraries"; +import { getAvailableSlots } from "@calcom/platform-libraries/slots"; import { RemoveSelectedSlotInput_2024_04_15, ReserveSlotInput_2024_04_15 } from "@calcom/platform-types"; import { ApiResponse, GetAvailableSlotsInput_2024_04_15 } from "@calcom/platform-types"; @@ -156,7 +156,7 @@ export class SlotsController_2024_04_15 { async getAvailableSlots( @Query() query: GetAvailableSlotsInput_2024_04_15, @Req() req: ExpressRequest - ): Promise> { + ): Promise> { const isTeamEvent = await this.slotsService.checkIfIsTeamEvent(query.eventTypeId); const availableSlots = await getAvailableSlots({ input: { diff --git a/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts index 0ba8a2a541..b77fbf148b 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts @@ -7,7 +7,7 @@ import { SlotFormat } from "@calcom/platform-enums"; export type TimeSlots = { slots: Record; }; -type RangeSlots = { +export type RangeSlots = { slots: Record; }; diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts index 8e9cf2ad72..6bfa47d322 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts @@ -2,7 +2,7 @@ import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_20 import { OrganizationsRepository } from "@/modules/organizations/index/organizations.repository"; import { OrganizationsUsersRepository } from "@/modules/organizations/users/index/organizations-users.repository"; import { UsersRepository } from "@/modules/users/users.repository"; -import { Injectable, NotFoundException } from "@nestjs/common"; +import { BadRequestException, Injectable, NotFoundException } from "@nestjs/common"; import { DateTime } from "luxon"; import { dynamicEvent } from "@calcom/platform-libraries"; @@ -88,6 +88,11 @@ export class SlotsInputService_2024_09_04 { dateTime = dateTime.set({ hour: 23, minute: 59, second: 59 }); } - return dateTime.toISO(); + const ISOEndTime = dateTime.toISO(); + if (ISOEndTime === null) { + throw new BadRequestException("Invalid end date"); + } + + return ISOEndTime; } } diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts index b9522ede24..e9290d4a6a 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts @@ -17,7 +17,7 @@ import { import { DateTime } from "luxon"; import { z } from "zod"; -import { getAvailableSlots } from "@calcom/platform-libraries"; +import { getAvailableSlots } from "@calcom/platform-libraries/slots"; import { GetSlotsInput_2024_09_04, ReserveSlotInput_2024_09_04 } from "@calcom/platform-types"; import { EventType } from "@calcom/prisma/client"; diff --git a/apps/api/v2/tsconfig.json b/apps/api/v2/tsconfig.json index f0d797462d..41fb06ff41 100644 --- a/apps/api/v2/tsconfig.json +++ b/apps/api/v2/tsconfig.json @@ -18,7 +18,8 @@ "@calcom/platform-constants": ["../../../packages/platform/constants/index.ts"], "@calcom/platform-types": ["../../../packages/platform/types/index.ts"], "@calcom/platform-utils": ["../../../packages/platform/utils/index.ts"], - "@calcom/platform-enums": ["../../../packages/platform/enums/index.ts"] + "@calcom/platform-enums": ["../../../packages/platform/enums/index.ts"], + "@calcom/platform-libraries/slots": ["../../../packages/platform/libraries/slots.ts"] }, "incremental": true, "skipLibCheck": true, diff --git a/packages/lib/event-types/getEventTypeById.ts b/packages/lib/event-types/getEventTypeById.ts index e1881bb515..bb187ca68c 100644 --- a/packages/lib/event-types/getEventTypeById.ts +++ b/packages/lib/event-types/getEventTypeById.ts @@ -1,6 +1,6 @@ import { Prisma } from "@prisma/client"; -import "server-only"; +//import "server-only"; import { getLocationGroupedOptions } from "@calcom/app-store/server"; import { getEventTypeAppData } from "@calcom/app-store/utils"; import { getBookingFieldsWithSystemFields } from "@calcom/features/bookings/lib/getBookingFields"; diff --git a/packages/platform/libraries/index.ts b/packages/platform/libraries/index.ts index 3a83296af6..590e11b81a 100644 --- a/packages/platform/libraries/index.ts +++ b/packages/platform/libraries/index.ts @@ -55,7 +55,6 @@ 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 addDelegationCredential from "@calcom/trpc/server/routers/viewer/delegationCredential/add.handler"; -import { getAvailableSlots } from "@calcom/trpc/server/routers/viewer/slots/util"; import { createNewUsersConnectToOrgIfExists, sendSignupToOrganizationEmail, @@ -116,8 +115,6 @@ export { handleInstantMeeting }; export { handleMarkNoShow }; export { handleCreatePhoneCall }; -export { getAvailableSlots }; -export type AvailableSlotsType = Awaited>; export { handleNewRecurringBooking } from "@calcom/features/bookings/lib/handleNewRecurringBooking"; export { getConnectedDestinationCalendarsAndEnsureDefaultsInDb } from "@calcom/lib/getConnectedDestinationCalendars"; @@ -207,7 +204,8 @@ export type { InternalLocation, } from "@calcom/lib/event-types/transformers"; -export { parseBookingLimit, parseEventTypeColor } from "@calcom/lib"; +export { parseEventTypeColor } from "@calcom/lib"; +export { parseBookingLimit } from "@calcom/lib/intervalLimits/isBookingLimits"; export { parseRecurringEvent } from "@calcom/lib/isRecurringEvent"; export { dynamicEvent } from "@calcom/lib/defaultEvents"; diff --git a/packages/platform/libraries/package.json b/packages/platform/libraries/package.json index 28a2b22bce..ffae8384fb 100644 --- a/packages/platform/libraries/package.json +++ b/packages/platform/libraries/package.json @@ -27,5 +27,24 @@ "vite": "^5.0.12", "vite-plugin-dts": "^3.7.2", "vite-plugin-environment": "^1.1.3" + }, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./slots": { + "import": "./dist/slots.js", + "require": "./dist/slots.cjs", + "types": "./dist/slots.d.ts" + } + }, + "typesVersions": { + "*": { + "slots": [ + "dist/slots.d.ts" + ] + } } } diff --git a/packages/platform/libraries/slots.ts b/packages/platform/libraries/slots.ts new file mode 100644 index 0000000000..8badaeea63 --- /dev/null +++ b/packages/platform/libraries/slots.ts @@ -0,0 +1,4 @@ +import { getAvailableSlots } from "@calcom/trpc/server/routers/viewer/slots/util"; + +export { getAvailableSlots }; +export type AvailableSlotsType = Awaited>; diff --git a/packages/platform/libraries/vite.config.js b/packages/platform/libraries/vite.config.js index 7f7a824c89..3636010b69 100644 --- a/packages/platform/libraries/vite.config.js +++ b/packages/platform/libraries/vite.config.js @@ -16,7 +16,10 @@ export default defineConfig({ platform: "node", ssr: true, lib: { - entry: resolve(__dirname, "./index.ts"), + entry: { + index: resolve(__dirname, "./index.ts"), + slots: resolve(__dirname, "./slots.ts"), + }, name: "calcom-lib", fileName: "calcom-lib", },