| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // libs/db/src/redis/redis.module.ts
- import { DynamicModule, Module, Provider } from '@nestjs/common';
- import Redis from 'ioredis';
- import { REDIS_CLIENT, REDIS_OPTIONS } from './redis.constants';
- import {
- RedisModuleAsyncOptions,
- RedisModuleOptions,
- } from './redis.interfaces';
- import { RedisService } from './redis.service';
- @Module({})
- export class RedisModule {
- static forRootAsync(options: RedisModuleAsyncOptions): DynamicModule {
- const optionsProvider: Provider = {
- provide: REDIS_OPTIONS,
- useFactory: options.useFactory,
- inject: options.inject ?? [],
- };
- const clientProvider: Provider = {
- provide: REDIS_CLIENT,
- useFactory: async (opts: RedisModuleOptions) => {
- const client = new Redis({
- host: opts.host,
- port: opts.port,
- password: opts.password || undefined,
- db: opts.db ?? 0,
- keyPrefix: opts.keyPrefix,
- tls: opts.tls ? {} : undefined,
- });
- client.on('error', (err) => {
- // eslint-disable-next-line no-console
- console.error('[Redis] Error:', err?.message ?? err);
- });
- return client;
- },
- inject: [REDIS_OPTIONS],
- };
- return {
- module: RedisModule,
- global: true, // Make it globally available
- imports: options.imports ?? [],
- providers: [optionsProvider, clientProvider, RedisService],
- exports: [clientProvider, RedisService], // 👈 important
- };
- }
- }
|