feat: add redis env validator

This commit is contained in:
Sergey Krylov 2026-01-28 05:59:12 +03:00
parent d3c5ffb8fe
commit 4216498dfc
8 changed files with 57 additions and 7 deletions

View File

@ -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,

View File

@ -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
View 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)
}
})

View File

@ -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
}

View File

@ -0,0 +1,6 @@
export interface RedisConfig {
username: string
password: string
host: string
port: number
}

View File

@ -1,2 +1,3 @@
export * from './grpc.validator'
export * from './database.validator'
export * from './redis.validator'

View 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
}

View File

@ -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
})