"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRedisClient = exports.connectRedis = exports.redisClient = void 0; const redis_1 = require("redis"); const config_1 = __importDefault(require("../config")); // Create Redis client const redisClient = (0, redis_1.createClient)({ url: `redis://${config_1.default.redis.password ? `${config_1.default.redis.password}@` : ''}${config_1.default.redis.host}:${config_1.default.redis.port}`, }); exports.redisClient = redisClient; // Handle Redis connection errors redisClient.on('error', (err) => { console.error('Redis Client Error:', err); }); // Create a mock Redis client for development when real connection fails const createMockRedisClient = () => { const store = new Map(); return { isOpen: true, connect: async () => console.log('Mock Redis client connected'), get: async (key) => store.get(key) || null, set: async (key, value) => { store.set(key, value); return 'OK'; }, incr: async (key) => { const current = parseInt(store.get(key) || '0', 10); const newValue = current + 1; store.set(key, newValue.toString()); return newValue; }, decr: async (key) => { const current = parseInt(store.get(key) || '0', 10); const newValue = Math.max(0, current - 1); store.set(key, newValue.toString()); return newValue; }, quit: async () => console.log('Mock Redis client disconnected'), }; }; // Connect to Redis let mockRedisClient = null; const connectRedis = async () => { try { if (!redisClient.isOpen) { await redisClient.connect(); console.log('Redis client connected'); } return redisClient; } catch (error) { console.error('Failed to connect to Redis:', error); console.log('Using mock Redis client for development...'); if (!mockRedisClient) { mockRedisClient = createMockRedisClient(); } return mockRedisClient; } }; exports.connectRedis = connectRedis; // Export the appropriate client const getRedisClient = async () => { try { if (redisClient.isOpen) { return redisClient; } return await connectRedis(); } catch (error) { if (!mockRedisClient) { mockRedisClient = createMockRedisClient(); } return mockRedisClient; } }; exports.getRedisClient = getRedisClient; exports.default = redisClient;