import { getLogger } from '@stock-bot/logger'; import { handlerRegistry, createJobHandler, type HandlerConfig, type ScheduledJobConfig } from '@stock-bot/queue'; import type { ServiceContainer } from '@stock-bot/di'; import { symbolOperations } from './operations'; const logger = getLogger('symbols-handler'); const HANDLER_NAME = 'symbols'; const symbolsHandlerConfig: HandlerConfig = { concurrency: 1, maxAttempts: 3, scheduledJobs: [ { operation: 'sync-qm-symbols', cronPattern: '0 2 * * *', // Daily at 2 AM payload: {}, priority: 5, immediately: false, } as ScheduledJobConfig, { operation: 'sync-symbols-qm', cronPattern: '0 4 * * *', // Daily at 4 AM payload: { provider: 'qm', clearFirst: false }, priority: 5, immediately: false, } as ScheduledJobConfig, ], operations: { 'sync-qm-symbols': symbolOperations.syncQMSymbols, 'sync-symbols-qm': symbolOperations.syncSymbolsFromProvider, 'sync-symbols-eod': symbolOperations.syncSymbolsFromProvider, 'sync-symbols-ib': symbolOperations.syncSymbolsFromProvider, 'sync-status': symbolOperations.getSyncStatus, }, }; export function initializeSymbolsHandler(container: ServiceContainer): void { logger.info('Registering symbols handler...'); // Update operations to use container const containerAwareOperations = Object.entries(symbolOperations).reduce((acc, [key, operation]) => { acc[key] = createJobHandler(async (payload: any) => { return operation(payload, container); }); return acc; }, {} as Record); const symbolsHandlerConfigWithContainer: HandlerConfig = { ...symbolsHandlerConfig, operations: containerAwareOperations, }; handlerRegistry.register(HANDLER_NAME, symbolsHandlerConfigWithContainer); logger.info('Symbols handler registered successfully'); }