diff --git a/src/app.module.ts b/src/app.module.ts index 5e48a47..e94566b 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 { 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, diff --git a/src/config/env/index.ts b/src/config/env/index.ts index 6815b45..72c669e 100644 --- a/src/config/env/index.ts +++ b/src/config/env/index.ts @@ -1,2 +1,3 @@ export * from './grpc.env' export * from './database.env' +export * from './redis.env' diff --git a/src/config/env/redis.env.ts b/src/config/env/redis.env.ts new file mode 100644 index 0000000..5e911a0 --- /dev/null +++ b/src/config/env/redis.env.ts @@ -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('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) + } +}) diff --git a/src/config/interfaces/all-configs.interface.ts b/src/config/interfaces/all-configs.interface.ts index 633255e..84e9347 100644 --- a/src/config/interfaces/all-configs.interface.ts +++ b/src/config/interfaces/all-configs.interface.ts @@ -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 } diff --git a/src/config/interfaces/redis.interface.ts b/src/config/interfaces/redis.interface.ts new file mode 100644 index 0000000..4b659a1 --- /dev/null +++ b/src/config/interfaces/redis.interface.ts @@ -0,0 +1,6 @@ +export interface RedisConfig { + username: string + password: string + host: string + port: number +} diff --git a/src/config/validators/index.ts b/src/config/validators/index.ts index b43f9cd..6f3e4eb 100644 --- a/src/config/validators/index.ts +++ b/src/config/validators/index.ts @@ -1,2 +1,3 @@ export * from './grpc.validator' export * from './database.validator' +export * from './redis.validator' diff --git a/src/config/validators/redis.validator.ts b/src/config/validators/redis.validator.ts new file mode 100644 index 0000000..3fc521b --- /dev/null +++ b/src/config/validators/redis.validator.ts @@ -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 +} diff --git a/src/infra/redis/redis.service.ts b/src/infra/redis/redis.service.ts index 01fd42e..f912c3d 100644 --- a/src/infra/redis/redis.service.ts +++ b/src/infra/redis/redis.service.ts @@ -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 + ) { super({ - username: configService.getOrThrow('REDIS_USERNAME'), - host: configService.getOrThrow('REDIS_HOST'), - port: configService.getOrThrow('REDIS_PORT'), - password: configService.getOrThrow('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 })