// redis.module.ts (NestJS) import { createClient } from '@keyv/redis'; import { DynamicModule, Module } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { NotificationModule } from '../modules/notification/notification.module'; import { RedisPubSubService } from './services'; @Module({}) export class RedisModule { static register(): DynamicModule { return { module: RedisModule, providers: [ { provide: 'REDIS_PUBLISHER', useFactory: async (configService: ConfigService) => { // Skip Redis connection during migration generation if (process.env.MIGRATIONS_RUN === 'false') { return null; } const redisUrl = configService.get('REDIS_URL'); if (!redisUrl) { return null; } const publisher = createClient({ url: redisUrl }); await publisher.connect(); return publisher; }, inject: [ConfigService], }, { provide: 'REDIS_SUBSCRIBER', useFactory: async (configService: ConfigService) => { // Skip Redis connection during migration generation if (process.env.MIGRATIONS_RUN === 'false') { return null; } const redisUrl = configService.get('REDIS_URL'); if (!redisUrl) { return null; } const subscriber = createClient({ url: redisUrl }); await subscriber.connect(); return subscriber; }, inject: [ConfigService], }, RedisPubSubService, ], exports: [ RedisPubSubService, 'REDIS_PUBLISHER', 'REDIS_SUBSCRIBER', ], imports: [NotificationModule], }; } }