Skip to content

Commit c6ad767

Browse files
refactor: decouple @calcom/prisma from @calcom/features, @calcom/ee, and @calcom/lib (calcom#24802)
* refactor: decouple @calcom/prisma from @calcom/features, @calcom/ee, and @calcom/lib - Inline helper functions in zod-utils.ts (emailSchema, slugify, getValidRhfFieldName, isPasswordValid, intervalLimitsType, zodAttributesQueryValue) - Update schema.prisma @zod.import comments to reference zod-utils instead of @calcom/lib - Inline idempotency key generation in booking-idempotency-key extension using uuid v5 - Move usage-tracking extension to @calcom/ee/prisma-extensions/ - Remove usage-tracking extension from packages/prisma/index.ts - Move Prisma DI module from @calcom/prisma to @calcom/features/di/modules/Prisma.ts - Update 20 import paths in @calcom/features to use new Prisma DI module - Remove @calcom/lib dependency from @calcom/prisma package.json - Add uuid dependency to @calcom/prisma package.json This reduces the dependency footprint of @calcom/prisma and breaks circular dependencies between packages. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> * feat: add EE-specific Prisma DI module with usage tracking Create packages/ee/di/modules/PrismaEE.ts to apply the usage-tracking extension in EE contexts. This module: - Imports the base prisma client from @calcom/prisma - Applies the usageTrackingExtention from @calcom/ee/prisma-extensions/usage-tracking - Exports the same DI tokens as the base Prisma module for override in EE containers This ensures usage tracking functionality is preserved in EE builds while keeping the base @calcom/prisma package free of EE dependencies. Note: EE containers should load this module after the base Prisma module to override the bindings. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
1 parent 896f8db commit c6ad767

28 files changed

Lines changed: 238 additions & 42 deletions

packages/ee/di/modules/PrismaEE.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { type Container, createModule } from "@calcom/features/di/di";
2+
import { DI_TOKENS } from "@calcom/features/di/tokens";
3+
import { prisma, readonlyPrisma } from "@calcom/prisma";
4+
5+
import { usageTrackingExtention } from "../../prisma-extensions/usage-tracking";
6+
7+
export const prismaEEModule = createModule();
8+
const token = DI_TOKENS.PRISMA_CLIENT;
9+
const readOnlyToken = DI_TOKENS.READ_ONLY_PRISMA_CLIENT;
10+
const moduleToken = DI_TOKENS.PRISMA_MODULE;
11+
12+
const prismaWithUsageTracking = prisma.$extends(usageTrackingExtention(prisma));
13+
14+
prismaEEModule.bind(token).toFactory(() => prismaWithUsageTracking, "singleton");
15+
prismaEEModule.bind(readOnlyToken).toFactory(() => readonlyPrisma, "singleton");
16+
17+
export const moduleLoader = {
18+
token,
19+
readOnlyToken,
20+
loadModule: (container: Container) => {
21+
container.load(moduleToken, prismaEEModule);
22+
},
23+
};
File renamed without changes.

packages/features/bookings/di/BookingCancelService.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BookingCancelService } from "@calcom/features/bookings/lib/handleCancelBooking";
22
import { bindModuleToClassOnToken, createModule } from "@calcom/lib/di/di";
33
import { DI_TOKENS } from "@calcom/lib/di/tokens";
4-
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
4+
import { moduleLoader as prismaModuleLoader } from "@calcom/features/di/modules/Prisma";
55

66
const thisModule = createModule();
77
const token = DI_TOKENS.BOOKING_CANCEL_SERVICE;

packages/features/bookings/di/InstantBookingCreateService.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { InstantBookingCreateService } from "@calcom/features/bookings/lib/service/InstantBookingCreateService";
22
import { createModule, bindModuleToClassOnToken } from "@calcom/features/di/di";
33
import { DI_TOKENS } from "@calcom/features/di/tokens";
4-
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
4+
import { moduleLoader as prismaModuleLoader } from "@calcom/features/di/modules/Prisma";
55

66
export const instantBookingCreateServiceModule = createModule();
77
const token = DI_TOKENS.INSTANT_BOOKING_CREATE_SERVICE;

packages/features/bookings/di/RegularBookingService.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { moduleLoader as luckyUserServiceModuleLoader } from "@calcom/features/d
77
import { moduleLoader as userRepositoryModuleLoader } from "@calcom/features/di/modules/User";
88
import { DI_TOKENS } from "@calcom/features/di/tokens";
99
import { moduleLoader as hashedLinkServiceModuleLoader } from "@calcom/features/hashedLink/di/HashedLinkService.module";
10-
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
10+
import { moduleLoader as prismaModuleLoader } from "@calcom/features/di/modules/Prisma";
1111

1212
const thisModule = createModule();
1313
const token = DI_TOKENS.REGULAR_BOOKING_SERVICE;

packages/features/di/containers/AvailableSlots.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DI_TOKENS } from "@calcom/features/di/tokens";
22
import { redisModule } from "@calcom/features/redis/di/redisModule";
3-
import { prismaModule } from "@calcom/prisma/prisma.module";
3+
import { prismaModule } from "@calcom/features/di/modules/Prisma";
44
import type { AvailableSlotsService } from "@calcom/trpc/server/routers/viewer/slots/util";
55
import { membershipRepositoryModule } from "@calcom/features/users/di/MembershipRepository.module";
66
import { createContainer } from "../di";

packages/features/di/containers/BookingLimits.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { CheckBookingLimitsService } from "@calcom/features/bookings/lib/checkBookingLimits";
22
import { DI_TOKENS } from "@calcom/features/di/tokens";
3-
import { prismaModule } from "@calcom/prisma/prisma.module";
3+
import { prismaModule } from "@calcom/features/di/modules/Prisma";
44

55
import type { CheckBookingAndDurationLimitsService } from "../../bookings/lib/handleNewBooking/checkBookingAndDurationLimits";
66
import { createContainer } from "../di";

packages/features/di/containers/BusyTimes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { BusyTimesService } from "@calcom/features/busyTimes/services/getBusyTimes";
22
import { DI_TOKENS } from "@calcom/features/di/tokens";
3-
import { prismaModule } from "@calcom/prisma/prisma.module";
3+
import { prismaModule } from "@calcom/features/di/modules/Prisma";
44

55
import { createContainer } from "../di";
66
import { bookingRepositoryModule } from "../modules/Booking";

packages/features/di/containers/Cache.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DI_TOKENS } from "@calcom/features/di/tokens";
2-
import { prismaModule } from "@calcom/prisma/prisma.module";
2+
import { prismaModule } from "@calcom/features/di/modules/Prisma";
33

44
import type { CacheService } from "../../../features/calendar-cache/lib/getShouldServeCache";
55
import { createContainer } from "../di";

packages/features/di/containers/FilterHosts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { FilterHostsService } from "@calcom/features/bookings/lib/host-filtering/filterHostsBySameRoundRobinHost";
22
import { DI_TOKENS } from "@calcom/features/di/tokens";
3-
import { prismaModule } from "@calcom/prisma/prisma.module";
3+
import { prismaModule } from "@calcom/features/di/modules/Prisma";
44

55
import { createContainer } from "../di";
66
import { bookingRepositoryModule } from "../modules/Booking";

0 commit comments

Comments
 (0)