Skip to content

Commit 4ff5f5f

Browse files
eunjae-leeemrysal
andauthored
refactor: use dependency injection for InsightsRoutingService (calcom#22677)
* refactor: use dependency injection for InsightsRoutingService * remove unused getter * clean up * Revert "clean up" This reverts commit a95b83d. * Update insightsRoutingDI.ts * Revert "Update insightsRoutingDI.ts" This reverts commit 39ead80. --------- Co-authored-by: Alex van Andel <me@alexvanandel.com>
1 parent f905ae7 commit 4ff5f5f

8 files changed

Lines changed: 74 additions & 6 deletions

File tree

packages/features/insights/hooks/useInsightsOrgTeams.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function useInsightsOrgTeams() {
1515
const teamId = orgTeamsType === "org" ? currentOrgId : orgTeamsType === "team" ? selectedTeamId : undefined;
1616
const userId = orgTeamsType === "yours" ? session.data?.user.id : undefined;
1717

18-
// Adding `scope` for InsightsRoutingService
18+
// Adding `scope` for InsightsRoutingBaseService
1919
// (renaming 'yours' to 'user')
2020
const scope: "org" | "team" | "user" = orgTeamsType === "yours" ? "user" : orgTeamsType;
2121

packages/features/insights/server/trpc-router.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {
1010
routingRepositoryBaseInputSchema,
1111
bookingRepositoryBaseInputSchema,
1212
} from "@calcom/features/insights/server/raw-data.schema";
13+
import { getInsightsRoutingService } from "@calcom/lib/di/containers/insights-routing";
1314
import { InsightsBookingService } from "@calcom/lib/server/service/insightsBooking";
14-
import { InsightsRoutingService } from "@calcom/lib/server/service/insightsRouting";
1515
import type { readonlyPrisma } from "@calcom/prisma";
1616
import { BookingStatus } from "@calcom/prisma/enums";
1717
import authedProcedure from "@calcom/trpc/server/procedures/authedProcedure";
@@ -1688,8 +1688,7 @@ export const insightsRouter = router({
16881688
timeView,
16891689
weekStart: ctx.user.weekStart,
16901690
});
1691-
const insightsRoutingService = new InsightsRoutingService({
1692-
prisma: ctx.insightsDb,
1691+
const insightsRoutingService = getInsightsRoutingService({
16931692
options: {
16941693
scope: input.scope,
16951694
teamId: input.selectedTeamId,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { createContainer } from "@evyweb/ioctopus";
2+
3+
import { DI_TOKENS } from "@calcom/lib/di/tokens";
4+
import type {
5+
InsightsRoutingServicePublicOptions,
6+
InsightsRoutingServiceFilterOptions,
7+
InsightsRoutingBaseService,
8+
} from "@calcom/lib/server/service/insightsRoutingBase";
9+
import type { InsightsRoutingService } from "@calcom/lib/server/service/insightsRoutingDI";
10+
import { prismaModule } from "@calcom/prisma/prisma.module";
11+
12+
import { insightsRoutingModule } from "../modules/insights-routing";
13+
14+
export function getInsightsRoutingService({
15+
options,
16+
filters,
17+
}: {
18+
options: InsightsRoutingServicePublicOptions;
19+
filters: InsightsRoutingServiceFilterOptions;
20+
}): InsightsRoutingBaseService {
21+
const container = createContainer();
22+
container.load(DI_TOKENS.READ_ONLY_PRISMA_CLIENT, prismaModule);
23+
container.load(DI_TOKENS.INSIGHTS_ROUTING_SERVICE_MODULE, insightsRoutingModule);
24+
25+
const diService = container.get<InsightsRoutingService>(DI_TOKENS.INSIGHTS_ROUTING_SERVICE);
26+
return diService.create({ options, filters });
27+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { createModule } from "@evyweb/ioctopus";
2+
3+
import type { IInsightsRoutingService } from "@calcom/lib/server/service/insightsRoutingDI";
4+
import { InsightsRoutingService } from "@calcom/lib/server/service/insightsRoutingDI";
5+
6+
import { DI_TOKENS } from "../tokens";
7+
8+
export const insightsRoutingModule = createModule();
9+
insightsRoutingModule.bind(DI_TOKENS.INSIGHTS_ROUTING_SERVICE).toClass(InsightsRoutingService, {
10+
prisma: DI_TOKENS.READ_ONLY_PRISMA_CLIENT,
11+
} satisfies Record<keyof IInsightsRoutingService, symbol>);

packages/lib/di/tokens.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ export const DI_TOKENS = {
2020
ROUTING_FORM_RESPONSE_REPOSITORY_MODULE: Symbol("RoutingFormResponseRepositoryModule"),
2121
AVAILABLE_SLOTS_SERVICE: Symbol("AvailableSlotsService"),
2222
AVAILABLE_SLOTS_SERVICE_MODULE: Symbol("AvailableSlotsModule"),
23+
INSIGHTS_ROUTING_SERVICE: Symbol("InsightsRoutingService"),
24+
INSIGHTS_ROUTING_SERVICE_MODULE: Symbol("InsightsRoutingServiceModule"),
2325
};

packages/lib/server/service/__tests__/insightsRouting.integration-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ColumnFilterType } from "@calcom/features/data-table/lib/types";
77
import prisma from "@calcom/prisma";
88
import { BookingStatus, MembershipRole } from "@calcom/prisma/enums";
99

10-
import { InsightsRoutingService } from "../../service/insightsRouting";
10+
import { InsightsRoutingBaseService as InsightsRoutingService } from "../../service/insightsRoutingBase";
1111

1212
// SQL condition constants for testing
1313
const NOTHING_CONDITION = Prisma.sql`1=0`;

packages/lib/server/service/insightsRouting.ts renamed to packages/lib/server/service/insightsRoutingBase.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export type InsightsRoutingServiceFilterOptions = {
5353

5454
const NOTHING_CONDITION = Prisma.sql`1=0`;
5555

56-
export class InsightsRoutingService {
56+
export class InsightsRoutingBaseService {
5757
private prisma: typeof readonlyPrisma;
5858
private options: InsightsRoutingServiceOptions | null;
5959
private filters: InsightsRoutingServiceFilterOptions;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type { readonlyPrisma } from "@calcom/prisma";
2+
3+
import {
4+
InsightsRoutingBaseService,
5+
type InsightsRoutingServicePublicOptions,
6+
type InsightsRoutingServiceFilterOptions,
7+
} from "./insightsRoutingBase";
8+
9+
export interface IInsightsRoutingService {
10+
prisma: typeof readonlyPrisma;
11+
}
12+
13+
export class InsightsRoutingService {
14+
constructor(private readonly dependencies: IInsightsRoutingService) {}
15+
16+
create({
17+
options,
18+
filters,
19+
}: {
20+
options: InsightsRoutingServicePublicOptions;
21+
filters: InsightsRoutingServiceFilterOptions;
22+
}): InsightsRoutingBaseService {
23+
return new InsightsRoutingBaseService({
24+
prisma: this.dependencies.prisma,
25+
options,
26+
filters,
27+
});
28+
}
29+
}

0 commit comments

Comments
 (0)