feat: add redis env validator
This commit is contained in:
parent
d3c5ffb8fe
commit
4216498dfc
@ -1,7 +1,7 @@
|
||||
import { Module } from '@nestjs/common'
|
||||
import { ConfigModule } from '@nestjs/config'
|
||||
|
||||
import { dabataseEnv, grpcEnv } from './config'
|
||||
import { dabataseEnv, grpcEnv, redisEnv } 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,10 @@ import { OtpModule } from './modules/otp/otp.module'
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forRoot({ isGlobal: true, load: [dabataseEnv, grpcEnv] }),
|
||||
ConfigModule.forRoot({
|
||||
isGlobal: true,
|
||||
load: [dabataseEnv, grpcEnv, redisEnv]
|
||||
}),
|
||||
PrismaModule,
|
||||
RedisModule,
|
||||
AuthModule,
|
||||
|
||||
1
src/config/env/index.ts
vendored
1
src/config/env/index.ts
vendored
@ -1,2 +1,3 @@
|
||||
export * from './grpc.env'
|
||||
export * from './database.env'
|
||||
export * from './redis.env'
|
||||
|
||||
16
src/config/env/redis.env.ts
vendored
Normal file
16
src/config/env/redis.env.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { registerAs } from '@nestjs/config'
|
||||
|
||||
import { RedisConfig } from '@/config/interfaces/redis.interface'
|
||||
import { RedisValidator } from '@/config/validators'
|
||||
import { validateEnv } from '@/shared/utils'
|
||||
|
||||
export const redisEnv = registerAs<RedisConfig>('redis', () => {
|
||||
validateEnv(process.env, RedisValidator)
|
||||
|
||||
return {
|
||||
username: process.env.REDIS_USERNAME,
|
||||
password: process.env.REDIS_PASSWORD,
|
||||
host: process.env.REDIS_HOST,
|
||||
port: parseInt(process.env.REDIS_PORT)
|
||||
}
|
||||
})
|
||||
@ -1,7 +1,9 @@
|
||||
import { DatabaseConfig } from './database.interface'
|
||||
import { GrpcConfig } from './grpc.interface'
|
||||
import { RedisConfig } from './redis.interface'
|
||||
|
||||
export interface AllConfigs {
|
||||
database: DatabaseConfig
|
||||
grpc: GrpcConfig
|
||||
redis: RedisConfig
|
||||
}
|
||||
|
||||
6
src/config/interfaces/redis.interface.ts
Normal file
6
src/config/interfaces/redis.interface.ts
Normal file
@ -0,0 +1,6 @@
|
||||
export interface RedisConfig {
|
||||
username: string
|
||||
password: string
|
||||
host: string
|
||||
port: number
|
||||
}
|
||||
@ -1,2 +1,3 @@
|
||||
export * from './grpc.validator'
|
||||
export * from './database.validator'
|
||||
export * from './redis.validator'
|
||||
|
||||
17
src/config/validators/redis.validator.ts
Normal file
17
src/config/validators/redis.validator.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { IsInt, IsString, Max, Min } from 'class-validator'
|
||||
|
||||
export class RedisValidator {
|
||||
@IsString()
|
||||
public REDIS_USERNAME: string
|
||||
|
||||
@IsString()
|
||||
public REDIS_PASSWORD: string
|
||||
|
||||
@IsString()
|
||||
public REDIS_HOST: string
|
||||
|
||||
@Min(1)
|
||||
@Max(65535)
|
||||
@IsInt()
|
||||
public REDIS_PORT: number
|
||||
}
|
||||
@ -7,6 +7,8 @@ import {
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import Redis from 'ioredis'
|
||||
|
||||
import { AllConfigs } from '@/config'
|
||||
|
||||
@Injectable()
|
||||
export class RedisService
|
||||
extends Redis
|
||||
@ -14,12 +16,14 @@ export class RedisService
|
||||
{
|
||||
private readonly logger = new Logger(RedisService.name)
|
||||
|
||||
public constructor(private readonly configService: ConfigService) {
|
||||
public constructor(
|
||||
private readonly configService: ConfigService<AllConfigs>
|
||||
) {
|
||||
super({
|
||||
username: configService.getOrThrow<string>('REDIS_USERNAME'),
|
||||
host: configService.getOrThrow<string>('REDIS_HOST'),
|
||||
port: configService.getOrThrow<number>('REDIS_PORT'),
|
||||
password: configService.getOrThrow<string>('REDIS_PASSWORD'),
|
||||
username: configService.get('redis.username', { infer: true }),
|
||||
host: configService.get('redis.host', { infer: true }),
|
||||
port: configService.get('redis.port', { infer: true }),
|
||||
password: configService.get('redis.password', { infer: true }),
|
||||
maxRetriesPerRequest: 5,
|
||||
enableOfflineQueue: true
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user