diff --git a/prisma.config.ts b/prisma.config.ts index 0461c56..5c66d1a 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -7,6 +7,6 @@ export default defineConfig({ path: 'prisma/migrations' }, datasource: { - url: process.env['POSTGRES_URI'] + url: process.env['DATABASE_URI'] } }) diff --git a/src/app.module.ts b/src/app.module.ts index c6f3675..5e48a47 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common' import { ConfigModule } from '@nestjs/config' -import { grpcEnv } from './config' +import { dabataseEnv, grpcEnv } from './config' import { PrismaModule } from './infra/prisma/prisma.module' import { RedisModule } from './infra/redis/redis.module' import { AuthModule } from './modules/auth/auth.module' @@ -9,7 +9,7 @@ import { OtpModule } from './modules/otp/otp.module' @Module({ imports: [ - ConfigModule.forRoot({ isGlobal: true, load: [grpcEnv] }), + ConfigModule.forRoot({ isGlobal: true, load: [dabataseEnv, grpcEnv] }), PrismaModule, RedisModule, AuthModule, diff --git a/src/config/env/database.env.ts b/src/config/env/database.env.ts new file mode 100644 index 0000000..55795aa --- /dev/null +++ b/src/config/env/database.env.ts @@ -0,0 +1,19 @@ +import { registerAs } from '@nestjs/config' + +import { validateEnv } from '@/shared/utils' + +import { DatabaseConfig } from '../interfaces/database.interface' +import { DatabaseValidator } from '../validators' + +export const dabataseEnv = registerAs('database', () => { + validateEnv(process.env, DatabaseValidator) + + return { + username: process.env.DATABASE_USERNAME, + password: process.env.DATABASE_PASSWORD, + host: process.env.DATABASE_HOST, + port: parseInt(process.env.DATABASE_PORT), + name: process.env.DATABASE_NAME, + uri: process.env.DATABASE_URI + } +}) diff --git a/src/config/env/index.ts b/src/config/env/index.ts index e23a50f..6815b45 100644 --- a/src/config/env/index.ts +++ b/src/config/env/index.ts @@ -1 +1,2 @@ export * from './grpc.env' +export * from './database.env' diff --git a/src/config/interfaces/all-configs.interface.ts b/src/config/interfaces/all-configs.interface.ts index 20be84b..633255e 100644 --- a/src/config/interfaces/all-configs.interface.ts +++ b/src/config/interfaces/all-configs.interface.ts @@ -1,5 +1,7 @@ +import { DatabaseConfig } from './database.interface' import { GrpcConfig } from './grpc.interface' export interface AllConfigs { + database: DatabaseConfig grpc: GrpcConfig } diff --git a/src/config/interfaces/database.interface.ts b/src/config/interfaces/database.interface.ts new file mode 100644 index 0000000..27d9fc5 --- /dev/null +++ b/src/config/interfaces/database.interface.ts @@ -0,0 +1,8 @@ +export interface DatabaseConfig { + username: string + password: string + host: string + port: number + name: string + uri: string +} diff --git a/src/config/validators/database.validator.ts b/src/config/validators/database.validator.ts new file mode 100644 index 0000000..f3cde0f --- /dev/null +++ b/src/config/validators/database.validator.ts @@ -0,0 +1,23 @@ +import { IsInt, IsString, Max, Min } from 'class-validator' + +export class DatabaseValidator { + @IsString() + public DATABASE_USERNAME: string + + @IsString() + public DATABASE_PASSWORD: string + + @IsString() + public DATABASE_HOST: string + + @Min(1) + @Max(65535) + @IsInt() + public DATABASE_PORT: number + + @IsString() + public DATABASE_NAME: string + + @IsString() + public DATABASE_URI: string +} diff --git a/src/config/validators/index.ts b/src/config/validators/index.ts index ec7ed52..b43f9cd 100644 --- a/src/config/validators/index.ts +++ b/src/config/validators/index.ts @@ -1 +1,2 @@ export * from './grpc.validator' +export * from './database.validator' diff --git a/src/infra/prisma/prisma.service.ts b/src/infra/prisma/prisma.service.ts index 7b42414..b6e7a7d 100644 --- a/src/infra/prisma/prisma.service.ts +++ b/src/infra/prisma/prisma.service.ts @@ -8,6 +8,8 @@ import { ConfigService } from '@nestjs/config' import { PrismaPg } from '@prisma/adapter-pg' import { PrismaClient } from '@prisma/generated/client' +import { AllConfigs } from '@/config' + @Injectable() export class PrismaService extends PrismaClient @@ -15,14 +17,16 @@ export class PrismaService { private readonly logger = new Logger(PrismaService.name) - public constructor(private readonly configService: ConfigService) { + public constructor( + private readonly configService: ConfigService + ) { super({ adapter: new PrismaPg({ - user: configService.getOrThrow('POSTGRES_USERNAME'), - password: configService.getOrThrow('POSTGRES_PASSWORD'), - host: configService.getOrThrow('POSTGRES_HOST'), - port: configService.getOrThrow('POSTGRES_PORT'), - database: configService.getOrThrow('POSTGRES_DATABASE_NAME') + user: configService.get('database.username', { infer: true }), + password: configService.get('database.password', { infer: true }), + host: configService.get('database.host', { infer: true }), + port: configService.get('database.port', { infer: true }), + database: configService.get('database.name', { infer: true }) }) }) }