From 76377d2d2c957af80bc7e057fe5dea21d9181158 Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Thu, 1 Aug 2024 12:41:50 +0300 Subject: [PATCH] chore: disconnect prisma on module destroy apiv2 (#16018) --- .../v2/src/modules/prisma/prisma-read.service.ts | 16 +++++++++++++--- .../src/modules/prisma/prisma-write.service.ts | 16 +++++++++++++--- .../repository/api-keys.repository.fixture.ts | 4 ++-- .../repository/billing.repository.fixture.ts | 4 ++-- .../repository/bookings.repository.fixture.ts | 6 +++--- .../repository/credentials.repository.fixture.ts | 4 ++-- .../repository/event-types.repository.fixture.ts | 4 ++-- .../repository/membership.repository.fixture.ts | 8 ++++---- .../repository/profiles.repository.fixture.ts | 6 +++--- .../repository/schedules.repository.fixture.ts | 6 +++--- .../repository/team.repository.fixture.ts | 8 ++++---- .../repository/tokens.repository.fixture.ts | 4 ++-- .../repository/users.repository.fixture.ts | 6 +++--- 13 files changed, 56 insertions(+), 36 deletions(-) diff --git a/apps/api/v2/src/modules/prisma/prisma-read.service.ts b/apps/api/v2/src/modules/prisma/prisma-read.service.ts index 7913e80538..a63d64fec3 100644 --- a/apps/api/v2/src/modules/prisma/prisma-read.service.ts +++ b/apps/api/v2/src/modules/prisma/prisma-read.service.ts @@ -1,10 +1,12 @@ -import type { OnModuleInit } from "@nestjs/common"; -import { Injectable } from "@nestjs/common"; +import type { OnModuleDestroy, OnModuleInit } from "@nestjs/common"; +import { Injectable, Logger } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { PrismaClient } from "@prisma/client"; @Injectable() -export class PrismaReadService implements OnModuleInit { +export class PrismaReadService implements OnModuleInit, OnModuleDestroy { + private logger = new Logger("PrismaReadService"); + public prisma: PrismaClient; constructor(readonly configService: ConfigService) { @@ -22,4 +24,12 @@ export class PrismaReadService implements OnModuleInit { async onModuleInit() { this.prisma.$connect(); } + + async onModuleDestroy() { + try { + await this.prisma.$disconnect(); + } catch (error) { + this.logger.error(error); + } + } } diff --git a/apps/api/v2/src/modules/prisma/prisma-write.service.ts b/apps/api/v2/src/modules/prisma/prisma-write.service.ts index 0b8fc2198c..bd3bc6e3cd 100644 --- a/apps/api/v2/src/modules/prisma/prisma-write.service.ts +++ b/apps/api/v2/src/modules/prisma/prisma-write.service.ts @@ -1,10 +1,12 @@ -import { OnModuleInit } from "@nestjs/common"; -import { Injectable } from "@nestjs/common"; +import { OnModuleDestroy, OnModuleInit } from "@nestjs/common"; +import { Injectable, Logger } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { PrismaClient } from "@prisma/client"; @Injectable() -export class PrismaWriteService implements OnModuleInit { +export class PrismaWriteService implements OnModuleInit, OnModuleDestroy { + private logger = new Logger("PrismaWriteService"); + public prisma: PrismaClient; constructor(readonly configService: ConfigService) { @@ -22,4 +24,12 @@ export class PrismaWriteService implements OnModuleInit { async onModuleInit() { this.prisma.$connect(); } + + async onModuleDestroy() { + try { + await this.prisma.$disconnect(); + } catch (error) { + this.logger.error(error); + } + } } diff --git a/apps/api/v2/test/fixtures/repository/api-keys.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/api-keys.repository.fixture.ts index ab10f52ec9..ddf1132905 100644 --- a/apps/api/v2/test/fixtures/repository/api-keys.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/api-keys.repository.fixture.ts @@ -4,11 +4,11 @@ import { TestingModule } from "@nestjs/testing"; import { randomBytes, createHash } from "crypto"; export class ApiKeysRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } diff --git a/apps/api/v2/test/fixtures/repository/billing.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/billing.repository.fixture.ts index 818956db90..a999ec670c 100644 --- a/apps/api/v2/test/fixtures/repository/billing.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/billing.repository.fixture.ts @@ -3,11 +3,11 @@ import { PrismaWriteService } from "@/modules/prisma/prisma-write.service"; import { TestingModule } from "@nestjs/testing"; export class PlatformBillingRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } diff --git a/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts index fc27078bf2..83b7e5f21a 100644 --- a/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts @@ -4,16 +4,16 @@ import { TestingModule } from "@nestjs/testing"; import { Booking, User } from "@prisma/client"; export class BookingsRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } async getById(bookingId: Booking["id"]) { - return this.primaReadClient.booking.findFirst({ where: { id: bookingId } }); + return this.prismaReadClient.booking.findFirst({ where: { id: bookingId } }); } async deleteById(bookingId: Booking["id"]) { diff --git a/apps/api/v2/test/fixtures/repository/credentials.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/credentials.repository.fixture.ts index 449d1124ec..6bfad9c671 100644 --- a/apps/api/v2/test/fixtures/repository/credentials.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/credentials.repository.fixture.ts @@ -4,11 +4,11 @@ import { TestingModule } from "@nestjs/testing"; import { Prisma } from "@prisma/client"; export class CredentialsRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } diff --git a/apps/api/v2/test/fixtures/repository/event-types.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/event-types.repository.fixture.ts index b033bcec3a..160d002f90 100644 --- a/apps/api/v2/test/fixtures/repository/event-types.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/event-types.repository.fixture.ts @@ -7,11 +7,11 @@ import { EventType } from "@prisma/client"; import { Prisma } from "@calcom/prisma/client"; export class EventTypesRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } diff --git a/apps/api/v2/test/fixtures/repository/membership.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/membership.repository.fixture.ts index 5cf8fd41f8..0943c4001f 100644 --- a/apps/api/v2/test/fixtures/repository/membership.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/membership.repository.fixture.ts @@ -4,11 +4,11 @@ import { TestingModule } from "@nestjs/testing"; import { Membership, MembershipRole, Prisma, Team, User } from "@prisma/client"; export class MembershipRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } @@ -21,11 +21,11 @@ export class MembershipRepositoryFixture { } async get(membershipId: Membership["id"]) { - return this.primaReadClient.membership.findFirst({ where: { id: membershipId } }); + return this.prismaReadClient.membership.findFirst({ where: { id: membershipId } }); } async getUserMembershipByTeamId(userId: User["id"], teamId: Team["id"]) { - return this.primaReadClient.membership.findFirst({ where: { teamId, userId } }); + return this.prismaReadClient.membership.findFirst({ where: { teamId, userId } }); } async addUserToOrg(user: User, org: Team, role: MembershipRole, accepted: boolean) { diff --git a/apps/api/v2/test/fixtures/repository/profiles.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/profiles.repository.fixture.ts index d31e6a7939..fbaf918b13 100644 --- a/apps/api/v2/test/fixtures/repository/profiles.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/profiles.repository.fixture.ts @@ -4,16 +4,16 @@ import { TestingModule } from "@nestjs/testing"; import { Prisma } from "@prisma/client"; export class ProfileRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } async get(profileId: number) { - return this.primaReadClient.profile.findFirst({ where: { id: profileId } }); + return this.prismaReadClient.profile.findFirst({ where: { id: profileId } }); } async create(data: Prisma.ProfileCreateInput) { diff --git a/apps/api/v2/test/fixtures/repository/schedules.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/schedules.repository.fixture.ts index abf4d1dcf0..f6ee3d9988 100644 --- a/apps/api/v2/test/fixtures/repository/schedules.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/schedules.repository.fixture.ts @@ -6,11 +6,11 @@ import { Schedule } from "@prisma/client"; import { Prisma } from "@calcom/prisma/client"; export class SchedulesRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } @@ -19,7 +19,7 @@ export class SchedulesRepositoryFixture { } async getById(scheduleId: Schedule["id"]) { - return this.primaReadClient.schedule.findFirst({ where: { id: scheduleId } }); + return this.prismaReadClient.schedule.findFirst({ where: { id: scheduleId } }); } async deleteById(scheduleId: Schedule["id"]) { diff --git a/apps/api/v2/test/fixtures/repository/team.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/team.repository.fixture.ts index 16f60078ae..14af29cdd5 100644 --- a/apps/api/v2/test/fixtures/repository/team.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/team.repository.fixture.ts @@ -4,16 +4,16 @@ import { TestingModule } from "@nestjs/testing"; import { Prisma, Team } from "@prisma/client"; export class TeamRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } async get(teamId: Team["id"]) { - return this.primaReadClient.team.findFirst({ where: { id: teamId } }); + return this.prismaReadClient.team.findFirst({ where: { id: teamId } }); } async create(data: Prisma.TeamCreateInput) { @@ -25,7 +25,7 @@ export class TeamRepositoryFixture { } async getPlatformOrgTeams(organizationId: number, oAuthClientId: string) { - return this.primaReadClient.team.findMany({ + return this.prismaReadClient.team.findMany({ where: { parentId: organizationId, createdByOAuthClientId: oAuthClientId, diff --git a/apps/api/v2/test/fixtures/repository/tokens.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/tokens.repository.fixture.ts index 6716f17948..da0316ddc5 100644 --- a/apps/api/v2/test/fixtures/repository/tokens.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/tokens.repository.fixture.ts @@ -5,11 +5,11 @@ import * as crypto from "crypto"; import { DateTime } from "luxon"; export class TokensRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } diff --git a/apps/api/v2/test/fixtures/repository/users.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/users.repository.fixture.ts index ce0035ab4c..92449ddb78 100644 --- a/apps/api/v2/test/fixtures/repository/users.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/users.repository.fixture.ts @@ -4,16 +4,16 @@ import { TestingModule } from "@nestjs/testing"; import { Prisma, User } from "@prisma/client"; export class UserRepositoryFixture { - private primaReadClient: PrismaReadService["prisma"]; + private prismaReadClient: PrismaReadService["prisma"]; private prismaWriteClient: PrismaWriteService["prisma"]; constructor(private readonly module: TestingModule) { - this.primaReadClient = module.get(PrismaReadService).prisma; + this.prismaReadClient = module.get(PrismaReadService).prisma; this.prismaWriteClient = module.get(PrismaWriteService).prisma; } async get(userId: User["id"]) { - return this.primaReadClient.user.findFirst({ where: { id: userId } }); + return this.prismaReadClient.user.findFirst({ where: { id: userId } }); } async create(data: Prisma.UserCreateInput) {