A social knowledge tool for researchers built on ATProto
at main 55 lines 2.1 kB view raw
1import { EnvironmentConfigService } from '../config/EnvironmentConfigService'; 2import { 3 ServiceFactory, 4 WorkerServices, 5} from '../http/factories/ServiceFactory'; 6import { UseCaseFactory } from '../http/factories/UseCaseFactory'; 7import { CardAddedToLibraryEventHandler } from '../../../modules/search/application/eventHandlers/CardAddedToLibraryEventHandler'; 8import { QueueNames } from '../events/QueueConfig'; 9import { EventNames } from '../events/EventConfig'; 10import { BaseWorkerProcess } from './BaseWorkerProcess'; 11import { IEventSubscriber } from '../../application/events/IEventSubscriber'; 12import { Repositories } from '../http/factories/RepositoryFactory'; 13 14export class SearchWorkerProcess extends BaseWorkerProcess { 15 constructor(configService: EnvironmentConfigService) { 16 super(configService, QueueNames.SEARCH); 17 } 18 19 protected createServices(repositories: Repositories): WorkerServices { 20 return ServiceFactory.createForWorker(this.configService, repositories); 21 } 22 23 protected async validateDependencies( 24 services: WorkerServices, 25 ): Promise<void> { 26 if (!services.redisConnection) { 27 throw new Error('Redis connection required for search worker'); 28 } 29 await services.redisConnection.ping(); 30 31 // Validate search service (which includes vector database health check) 32 const searchHealthResult = await services.searchService.healthCheck(); 33 if (searchHealthResult.isErr() || !searchHealthResult.value) { 34 throw new Error('Search service connection required for search worker'); 35 } 36 } 37 38 protected async registerHandlers( 39 subscriber: IEventSubscriber, 40 services: WorkerServices, 41 repositories: Repositories, 42 ): Promise<void> { 43 const useCases = UseCaseFactory.createForWorker(repositories, services); 44 45 const cardAddedToLibraryHandler = new CardAddedToLibraryEventHandler( 46 useCases.indexUrlForSearchUseCase, 47 repositories.cardRepository, 48 ); 49 50 await subscriber.subscribe( 51 EventNames.CARD_ADDED_TO_LIBRARY, 52 cardAddedToLibraryHandler, 53 ); 54 } 55}