Skip to content

Commit 82951cd

Browse files
hariombalharadevin-ai-integration[bot]ThyMinimalDev
authored
chore: [Booking Flow Refactor - 5] Move post booking things to separate service BookingEventHandlerService starting with HashedLink usage handling (calcom#24025)
* chore: Move post booking stuff to separate service * refactor: improve ISP compliance in BookingEventHandlerService - Refactor updatePrivateLinkUsage to only accept hashedLink parameter instead of full payload - Remove shouldProcess function and inline isDryRun check for better clarity - Addresses feedback from PR calcom#24025 Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * define only what is used * Define hashed-link-service as well in api-v2 * fix: export HashedLinkService through platform-libraries - Add HashedLinkService to platform-libraries/private-links.ts - Update API V2 to import from platform library instead of direct path - Fixes MODULE_NOT_FOUND error in API V2 build Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
1 parent ae87fdc commit 82951cd

27 files changed

Lines changed: 763 additions & 60 deletions

apps/api/v2/src/lib/modules/regular-booking.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { PrismaUserRepository } from "@/lib/repositories/prisma-user.repository"
77
import { CacheService } from "@/lib/services/cache.service";
88
import { CheckBookingAndDurationLimitsService } from "@/lib/services/check-booking-and-duration-limits.service";
99
import { CheckBookingLimitsService } from "@/lib/services/check-booking-limits.service";
10+
import { HashedLinkService } from "@/lib/services/hashed-link.service";
1011
import { LuckyUserService } from "@/lib/services/lucky-user.service";
1112
import { RegularBookingService } from "@/lib/services/regular-booking.service";
1213
import { PrismaModule } from "@/modules/prisma/prisma.module";
@@ -24,9 +25,10 @@ import { Module } from "@nestjs/common";
2425
CacheService,
2526
CheckBookingAndDurationLimitsService,
2627
CheckBookingLimitsService,
28+
HashedLinkService,
2729
LuckyUserService,
2830
RegularBookingService,
2931
],
3032
exports: [RegularBookingService],
3133
})
32-
export class RegularBookingModule {}
34+
export class RegularBookingModule { }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Injectable } from "@nestjs/common";
2+
3+
import { HashedLinkService as BaseHashedLinkService } from "@calcom/platform-libraries/private-links";
4+
5+
@Injectable()
6+
export class HashedLinkService extends BaseHashedLinkService {
7+
constructor() {
8+
super();
9+
}
10+
}

apps/api/v2/src/lib/services/regular-booking.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { PrismaBookingRepository } from "@/lib/repositories/prisma-booking.repos
22
import { PrismaUserRepository } from "@/lib/repositories/prisma-user.repository";
33
import { CacheService } from "@/lib/services/cache.service";
44
import { CheckBookingAndDurationLimitsService } from "@/lib/services/check-booking-and-duration-limits.service";
5+
import { HashedLinkService } from "@/lib/services/hashed-link.service";
56
import { LuckyUserService } from "@/lib/services/lucky-user.service";
67
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
78
import { Injectable } from "@nestjs/common";
@@ -16,6 +17,7 @@ export class RegularBookingService extends BaseRegularBookingService {
1617
checkBookingAndDurationLimitsService: CheckBookingAndDurationLimitsService,
1718
prismaWriteService: PrismaWriteService,
1819
bookingRepository: PrismaBookingRepository,
20+
hashedLinkService: HashedLinkService,
1921
luckyUserService: LuckyUserService,
2022
userRepository: PrismaUserRepository
2123
) {
@@ -24,6 +26,7 @@ export class RegularBookingService extends BaseRegularBookingService {
2426
checkBookingAndDurationLimitsService,
2527
prismaClient: prismaWriteService.prisma as unknown as PrismaClient,
2628
bookingRepository,
29+
hashedLinkService,
2730
luckyUserService,
2831
userRepository,
2932
});

apps/web/lib/d/[link]/[slug]/getServerSideProps.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import type { GetBookingType } from "@calcom/features/bookings/lib/get-booking";
88
import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains";
99
import { EventRepository } from "@calcom/features/eventtypes/repositories/EventRepository";
1010
import { FeaturesRepository } from "@calcom/features/flags/features.repository";
11-
import { HashedLinkService } from "@calcom/features/hashedLink/services/hashedLinkService";
1211
import {
1312
shouldHideBrandingForTeamEvent,
1413
shouldHideBrandingForUserEvent,
1514
} from "@calcom/features/profile/lib/hideBranding";
1615
import { UserRepository } from "@calcom/features/users/repositories/UserRepository";
16+
import { HashedLinkService } from "@calcom/features/hashedLink/lib/service/HashedLinkService";
1717
import slugify from "@calcom/lib/slugify";
1818
import prisma from "@calcom/prisma";
1919
import { RedirectType } from "@calcom/prisma/enums";
@@ -82,9 +82,8 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
8282
redirect: {
8383
permanent: false,
8484
// App Router doesn't have access to the current path directly, so we build it manually
85-
destination: `${redirectWithOriginAndSearchString.origin ?? ""}/d/${link}/${slug}${
86-
redirectWithOriginAndSearchString.searchString
87-
}`,
85+
destination: `${redirectWithOriginAndSearchString.origin ?? ""}/d/${link}/${slug}${redirectWithOriginAndSearchString.searchString
86+
}`,
8887
},
8988
};
9089
}

apps/web/test/utils/bookingScenario/getMockRequestDataForBooking.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export function getBasicMockRequestDataForBooking() {
1515
user: "teampro",
1616
metadata: {},
1717
hasHashedBookingLink: false,
18-
hashedLink: null,
1918
};
2019
}
2120

@@ -35,6 +34,9 @@ type CommonPropsMockRequestData = {
3534
attendeePhoneNumber?: string;
3635
smsReminderNumber?: string;
3736
};
37+
_isDryRun?: boolean;
38+
hashedLink?: string;
39+
hasHashedBookingLink?: boolean;
3840
};
3941

4042
export function getMockRequestDataForBooking({

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { moduleLoader as checkBookingAndDurationLimitsModuleLoader } from "@calc
66
import { moduleLoader as luckyUserServiceModuleLoader } from "@calcom/features/di/modules/LuckyUser";
77
import { moduleLoader as userRepositoryModuleLoader } from "@calcom/features/di/modules/User";
88
import { DI_TOKENS } from "@calcom/features/di/tokens";
9+
import { moduleLoader as hashedLinkServiceModuleLoader } from "@calcom/features/hashedLink/di/HashedLinkService.module";
910
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
1011

1112
const thisModule = createModule();
@@ -24,6 +25,7 @@ const loadModule = bindModuleToClassOnToken({
2425
bookingRepository: bookingRepositoryModuleLoader,
2526
luckyUserService: luckyUserServiceModuleLoader,
2627
userRepository: userRepositoryModuleLoader,
28+
hashedLinkService: hashedLinkServiceModuleLoader,
2729
},
2830
});
2931

packages/features/bookings/lib/dto/types.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,8 @@ export type InstantBookingCreateResult = {
5454
expires: Date;
5555
userId: number | null;
5656
};
57+
58+
// More properties to be added to this config in followup PRs
59+
export type BookingFlowConfig = {
60+
isDryRun: boolean;
61+
};

0 commit comments

Comments
 (0)