feat: add redis env validator
This commit is contained in:
parent
d3c5ffb8fe
commit
4216498dfc
@ -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 { dabataseEnv, grpcEnv } from './config'
|
import { dabataseEnv, grpcEnv, redisEnv } 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,10 @@ import { OtpModule } from './modules/otp/otp.module'
|
|||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ConfigModule.forRoot({ isGlobal: true, load: [dabataseEnv, grpcEnv] }),
|
ConfigModule.forRoot({
|
||||||
|
isGlobal: true,
|
||||||
|
load: [dabataseEnv, grpcEnv, redisEnv]
|
||||||
|
}),
|
||||||
PrismaModule,
|
PrismaModule,
|
||||||
RedisModule,
|
RedisModule,
|
||||||
AuthModule,
|
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 './grpc.env'
|
||||||
export * from './database.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 { DatabaseConfig } from './database.interface'
|
||||||
import { GrpcConfig } from './grpc.interface'
|
import { GrpcConfig } from './grpc.interface'
|
||||||
|
import { RedisConfig } from './redis.interface'
|
||||||
|
|
||||||
export interface AllConfigs {
|
export interface AllConfigs {
|
||||||
database: DatabaseConfig
|
database: DatabaseConfig
|
||||||
grpc: GrpcConfig
|
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 './grpc.validator'
|
||||||
export * from './database.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 { ConfigService } from '@nestjs/config'
|
||||||
import Redis from 'ioredis'
|
import Redis from 'ioredis'
|
||||||
|
|
||||||
|
import { AllConfigs } from '@/config'
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RedisService
|
export class RedisService
|
||||||
extends Redis
|
extends Redis
|
||||||
@ -14,12 +16,14 @@ export class RedisService
|
|||||||
{
|
{
|
||||||
private readonly logger = new Logger(RedisService.name)
|
private readonly logger = new Logger(RedisService.name)
|
||||||
|
|
||||||
public constructor(private readonly configService: ConfigService) {
|
public constructor(
|
||||||
|
private readonly configService: ConfigService<AllConfigs>
|
||||||
|
) {
|
||||||
super({
|
super({
|
||||||
username: configService.getOrThrow<string>('REDIS_USERNAME'),
|
username: configService.get('redis.username', { infer: true }),
|
||||||
host: configService.getOrThrow<string>('REDIS_HOST'),
|
host: configService.get('redis.host', { infer: true }),
|
||||||
port: configService.getOrThrow<number>('REDIS_PORT'),
|
port: configService.get('redis.port', { infer: true }),
|
||||||
password: configService.getOrThrow<string>('REDIS_PASSWORD'),
|
password: configService.get('redis.password', { infer: true }),
|
||||||
maxRetriesPerRequest: 5,
|
maxRetriesPerRequest: 5,
|
||||||
enableOfflineQueue: true
|
enableOfflineQueue: true
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user