81 lines
2.7 KiB
JavaScript
81 lines
2.7 KiB
JavaScript
"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;
|