diff --git a/src/db/db.module.ts b/src/db/db.module.ts index 362539d..df63f45 100644 --- a/src/db/db.module.ts +++ b/src/db/db.module.ts @@ -1,4 +1,4 @@ -import { Global, Module } from "@nestjs/common"; +import { Global, Inject, Module, OnApplicationShutdown } from "@nestjs/common"; import { Pool } from "pg"; import { drizzle, NodePgDatabase } from "drizzle-orm/node-postgres"; import { ConfigModule, ConfigService } from "@nestjs/config"; @@ -9,16 +9,28 @@ import * as schema from '../../drizzle/schema'; imports: [ConfigModule], providers: [ { - provide: "DRIZZLE", - useFactory: (configService: ConfigService): NodePgDatabase => { - const pool = new Pool({ + provide: "DB_POOL", + useFactory: (configService: ConfigService) => { + return new Pool({ connectionString: configService.get('PG_DATABASE_URL') }); - return drizzle(pool, { schema: schema }); }, inject: [ConfigService] + }, + { + provide: "DRIZZLE", + useFactory: (pool: Pool): NodePgDatabase => { + return drizzle(pool, { schema: schema }); + }, + inject: ["DB_POOL"] } ], exports: ["DRIZZLE"] }) -export class DbModule {} \ No newline at end of file +export class DbModule implements OnApplicationShutdown { + constructor(@Inject('DB_POOL') private readonly pool: Pool) {} + + async onApplicationShutdown(signal?: string) { + await this.pool.end(); + } +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 2851bec..de0361c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,7 +23,9 @@ async function bootstrap() { credentials: true, }); + app.enableShutdownHooks(); await app.listen(process.env.PORT ?? 3000); + } bootstrap(); diff --git a/src/redis/redis.module.ts b/src/redis/redis.module.ts index c229fe0..58261bb 100644 --- a/src/redis/redis.module.ts +++ b/src/redis/redis.module.ts @@ -1,4 +1,4 @@ -import { Global, Module } from "@nestjs/common"; +import { Global, Inject, Module, OnApplicationShutdown } from "@nestjs/common"; import { ConfigModule, ConfigService } from "@nestjs/config"; import Redis from "ioredis"; @@ -18,4 +18,10 @@ import Redis from "ioredis"; ], exports: ["REDIS"] }) -export class RedisModule{} \ No newline at end of file +export class RedisModule implements OnApplicationShutdown { + constructor(@Inject("REDIS") private readonly redis: Redis) {} + + async onApplicationShutdown(signal?: string) { + await this.redis.quit(); + } +} \ No newline at end of file