feat: add database env validator
This commit is contained in:
parent
15e63f9725
commit
d3c5ffb8fe
@ -7,6 +7,6 @@ export default defineConfig({
|
||||
path: 'prisma/migrations'
|
||||
},
|
||||
datasource: {
|
||||
url: process.env['POSTGRES_URI']
|
||||
url: process.env['DATABASE_URI']
|
||||
}
|
||||
})
|
||||
|
||||
@ -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,
|
||||
|
||||
19
src/config/env/database.env.ts
vendored
Normal file
19
src/config/env/database.env.ts
vendored
Normal file
@ -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<DatabaseConfig>('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
|
||||
}
|
||||
})
|
||||
1
src/config/env/index.ts
vendored
1
src/config/env/index.ts
vendored
@ -1 +1,2 @@
|
||||
export * from './grpc.env'
|
||||
export * from './database.env'
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import { DatabaseConfig } from './database.interface'
|
||||
import { GrpcConfig } from './grpc.interface'
|
||||
|
||||
export interface AllConfigs {
|
||||
database: DatabaseConfig
|
||||
grpc: GrpcConfig
|
||||
}
|
||||
|
||||
8
src/config/interfaces/database.interface.ts
Normal file
8
src/config/interfaces/database.interface.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export interface DatabaseConfig {
|
||||
username: string
|
||||
password: string
|
||||
host: string
|
||||
port: number
|
||||
name: string
|
||||
uri: string
|
||||
}
|
||||
23
src/config/validators/database.validator.ts
Normal file
23
src/config/validators/database.validator.ts
Normal file
@ -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
|
||||
}
|
||||
@ -1 +1,2 @@
|
||||
export * from './grpc.validator'
|
||||
export * from './database.validator'
|
||||
|
||||
@ -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<AllConfigs>
|
||||
) {
|
||||
super({
|
||||
adapter: new PrismaPg({
|
||||
user: configService.getOrThrow<string>('POSTGRES_USERNAME'),
|
||||
password: configService.getOrThrow<string>('POSTGRES_PASSWORD'),
|
||||
host: configService.getOrThrow<string>('POSTGRES_HOST'),
|
||||
port: configService.getOrThrow<number>('POSTGRES_PORT'),
|
||||
database: configService.getOrThrow<string>('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 })
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user