stock-bot/apps/data-service/src/providers/qm.provider.ts

82 lines
2.7 KiB
TypeScript

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');
}