56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
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<string, any>);
|
|
|
|
const symbolsHandlerConfigWithContainer: HandlerConfig = {
|
|
...symbolsHandlerConfig,
|
|
operations: containerAwareOperations,
|
|
};
|
|
|
|
handlerRegistry.register(HANDLER_NAME, symbolsHandlerConfigWithContainer);
|
|
logger.info('Symbols handler registered successfully');
|
|
}
|