import { getLogger } from '@stock-bot/logger'; import { handlerRegistry, type HandlerConfigWithSchedule } from '@stock-bot/queue'; import type { SymbolSpiderJob } from './qm.tasks'; const logger = getLogger('qm-provider'); // Initialize and register the IB provider export function initializeQMProvider() { logger.info('Registering IB provider with scheduled jobs...'); const qmProviderConfig: HandlerConfigWithSchedule = { name: 'qm', operations: { 'create-sessions': async () => { logger.info('Creating QM sessions...'); const { createSessions } = await import('./qm.tasks'); await createSessions(); logger.info('QM sessions created successfully'); return { success: true, message: 'QM sessions created successfully' }; }, 'search-symbols': async () => { logger.info('Starting QM symbol search...'); const { fetchSymbols } = await import('./qm.tasks'); const symbols = await fetchSymbols(); if (symbols && symbols.length > 0) { logger.info('QM symbol search completed successfully', { count: symbols.length }); return { success: true, message: 'QM symbol search completed successfully', count: symbols.length, symbols: symbols.slice(0, 10), // Return first 10 symbols as sample }; } else { logger.warn('QM symbol search returned no results'); return { success: false, message: 'No symbols found', count: 0, }; } }, 'spider-symbol-search': async (payload: SymbolSpiderJob) => { logger.info('Processing spider symbol search job', { payload }); const { spiderSymbolSearch } = await import('./qm.tasks'); const result = await spiderSymbolSearch(payload); logger.info('Spider search job completed', { success: result.success, symbolsFound: result.symbolsFound, jobsCreated: result.jobsCreated, payload, }); return result; }, }, scheduledJobs: [ { type: 'session-management', operation: 'create-sessions', payload: {}, cronPattern: '*/15 * * * * *', // Every minute priority: 7, immediately: true, description: 'Create and maintain QM sessions', }, { type: 'qm-maintnance', operation: 'spider-symbol-search', payload: {}, cronPattern: '0 0 * * 0', // Every minute priority: 10, description: 'Comprehensive symbol search using QM API', }, ], }; handlerRegistry.registerWithSchedule(qmProviderConfig); logger.info('IB provider registered successfully with scheduled jobs'); }