feat: add database env validator
This commit is contained in:
parent
15e63f9725
commit
d3c5ffb8fe
@ -7,6 +7,6 @@ export default defineConfig({
|
|||||||
path: 'prisma/migrations'
|
path: 'prisma/migrations'
|
||||||
},
|
},
|
||||||
datasource: {
|
datasource: {
|
||||||
url: process.env['POSTGRES_URI']
|
url: process.env['DATABASE_URI']
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Module } from '@nestjs/common'
|
import { Module } from '@nestjs/common'
|
||||||
import { ConfigModule } from '@nestjs/config'
|
import { ConfigModule } from '@nestjs/config'
|
||||||
|
|
||||||
import { grpcEnv } from './config'
|
import { dabataseEnv, grpcEnv } from './config'
|
||||||
import { PrismaModule } from './infra/prisma/prisma.module'
|
import { PrismaModule } from './infra/prisma/prisma.module'
|
||||||
import { RedisModule } from './infra/redis/redis.module'
|
import { RedisModule } from './infra/redis/redis.module'
|
||||||
import { AuthModule } from './modules/auth/auth.module'
|
import { AuthModule } from './modules/auth/auth.module'
|
||||||
@ -9,7 +9,7 @@ import { OtpModule } from './modules/otp/otp.module'
|
|||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ConfigModule.forRoot({ isGlobal: true, load: [grpcEnv] }),
|
ConfigModule.forRoot({ isGlobal: true, load: [dabataseEnv, grpcEnv] }),
|
||||||
PrismaModule,
|
PrismaModule,
|
||||||
RedisModule,
|
RedisModule,
|
||||||
AuthModule,
|
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 './grpc.env'
|
||||||
|
export * from './database.env'
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
|
import { DatabaseConfig } from './database.interface'
|
||||||
import { GrpcConfig } from './grpc.interface'
|
import { GrpcConfig } from './grpc.interface'
|
||||||
|
|
||||||
export interface AllConfigs {
|
export interface AllConfigs {
|
||||||
|
database: DatabaseConfig
|
||||||
grpc: GrpcConfig
|
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 './grpc.validator'
|
||||||
|
export * from './database.validator'
|
||||||
|
|||||||
@ -8,6 +8,8 @@ import { ConfigService } from '@nestjs/config'
|
|||||||
import { PrismaPg } from '@prisma/adapter-pg'
|
import { PrismaPg } from '@prisma/adapter-pg'
|
||||||
import { PrismaClient } from '@prisma/generated/client'
|
import { PrismaClient } from '@prisma/generated/client'
|
||||||
|
|
||||||
|
import { AllConfigs } from '@/config'
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PrismaService
|
export class PrismaService
|
||||||
extends PrismaClient
|
extends PrismaClient
|
||||||
@ -15,14 +17,16 @@ export class PrismaService
|
|||||||
{
|
{
|
||||||
private readonly logger = new Logger(PrismaService.name)
|
private readonly logger = new Logger(PrismaService.name)
|
||||||
|
|
||||||
public constructor(private readonly configService: ConfigService) {
|
public constructor(
|
||||||
|
private readonly configService: ConfigService<AllConfigs>
|
||||||
|
) {
|
||||||
super({
|
super({
|
||||||
adapter: new PrismaPg({
|
adapter: new PrismaPg({
|
||||||
user: configService.getOrThrow<string>('POSTGRES_USERNAME'),
|
user: configService.get('database.username', { infer: true }),
|
||||||
password: configService.getOrThrow<string>('POSTGRES_PASSWORD'),
|
password: configService.get('database.password', { infer: true }),
|
||||||
host: configService.getOrThrow<string>('POSTGRES_HOST'),
|
host: configService.get('database.host', { infer: true }),
|
||||||
port: configService.getOrThrow<number>('POSTGRES_PORT'),
|
port: configService.get('database.port', { infer: true }),
|
||||||
database: configService.getOrThrow<string>('POSTGRES_DATABASE_NAME')
|
database: configService.get('database.name', { infer: true })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user