A social knowledge tool for researchers built on ATProto
at main 1.0 kB view raw
1import { ILockService } from './ILockService'; 2import { RedisLockService } from './RedisLockService'; 3import { InMemoryLockService } from './InMemoryLockService'; 4import { RedisFactory } from '../redis/RedisFactory'; 5import { configService } from '../config'; 6 7export class LockServiceFactory { 8 static create(): ILockService { 9 const useMockPersistence = configService.shouldUseMockPersistence(); 10 if (!useMockPersistence) { 11 try { 12 const redis = RedisFactory.createConnection({ 13 host: process.env.REDIS_HOST || 'localhost', 14 port: parseInt(process.env.REDIS_PORT || '6379'), 15 password: process.env.REDIS_PASSWORD, 16 maxRetriesPerRequest: null, 17 }); 18 19 return new RedisLockService(redis); 20 } catch (error) { 21 console.warn( 22 'Failed to connect to Redis, falling back to in-memory locks:', 23 error, 24 ); 25 return new InMemoryLockService(); 26 } 27 } 28 29 return new InMemoryLockService(); 30 } 31}