A social knowledge tool for researchers built on ATProto
at main 3.0 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 as FeedCardAddedToLibraryEventHandler } from '../../../modules/feeds/application/eventHandlers/CardAddedToLibraryEventHandler'; 8import { CardAddedToLibraryEventHandler as SearchCardAddedToLibraryEventHandler } from '../../../modules/search/application/eventHandlers/CardAddedToLibraryEventHandler'; 9import { CardAddedToCollectionEventHandler } from '../../../modules/feeds/application/eventHandlers/CardAddedToCollectionEventHandler'; 10import { CardCollectionSaga } from '../../../modules/feeds/application/sagas/CardCollectionSaga'; 11import { EventNames } from '../events/EventConfig'; 12import { IProcess } from '../../domain/IProcess'; 13import { IEventSubscriber } from '../../application/events/IEventSubscriber'; 14import { 15 RepositoryFactory, 16 Repositories, 17} from '../http/factories/RepositoryFactory'; 18 19export class InMemoryEventWorkerProcess implements IProcess { 20 constructor(private configService: EnvironmentConfigService) {} 21 22 async start(): Promise<void> { 23 console.log('Starting in-memory event worker...'); 24 25 const repositories = RepositoryFactory.create(this.configService); 26 const services = ServiceFactory.createForWorker( 27 this.configService, 28 repositories, 29 ); 30 31 const eventSubscriber = services.createEventSubscriber('feeds'); // Queue name doesn't matter for in-memory 32 await this.registerHandlers(eventSubscriber, services, repositories); 33 await eventSubscriber.start(); 34 35 console.log('In-memory event worker started'); 36 } 37 38 private async registerHandlers( 39 subscriber: IEventSubscriber, 40 services: WorkerServices, 41 repositories: Repositories, 42 ): Promise<void> { 43 const useCases = UseCaseFactory.createForWorker(repositories, services); 44 45 // Feed handlers 46 const cardCollectionSaga = new CardCollectionSaga( 47 useCases.addActivityToFeedUseCase, 48 services.sagaStateStore, 49 ); 50 51 const feedCardAddedToLibraryHandler = 52 new FeedCardAddedToLibraryEventHandler(cardCollectionSaga); 53 const cardAddedToCollectionHandler = new CardAddedToCollectionEventHandler( 54 cardCollectionSaga, 55 ); 56 57 // Search handlers 58 const searchCardAddedToLibraryHandler = 59 new SearchCardAddedToLibraryEventHandler( 60 useCases.indexUrlForSearchUseCase, 61 repositories.cardRepository, 62 ); 63 64 // Register feed handlers 65 await subscriber.subscribe( 66 EventNames.CARD_ADDED_TO_LIBRARY, 67 feedCardAddedToLibraryHandler, 68 ); 69 70 await subscriber.subscribe( 71 EventNames.CARD_ADDED_TO_COLLECTION, 72 cardAddedToCollectionHandler, 73 ); 74 75 // Register search handlers 76 await subscriber.subscribe( 77 EventNames.CARD_ADDED_TO_LIBRARY, 78 searchCardAddedToLibraryHandler, 79 ); 80 } 81}