A social knowledge tool for researchers built on ATProto
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}