stock-bot/apps/stock/data-ingestion/src/handlers/te/actions/data-scheduler.action.ts

41 lines
1.1 KiB
TypeScript

import type { TeHandler } from '../te.handler';
export async function dataScheduler(this: TeHandler): Promise<{ scheduled: number }> {
const { logger, mongodb } = this;
const candidates = await mongodb?.find('teUrls', {
teType: 'te',
teSymbol: { $exists: true, $ne: null },
teChartsDatasource: { $exists: true },
teChartToken: { $exists: true },
teLastUpdate: { $exists: true },
teChart: 'EC',
$or: [
{ lastDataFetch: { $exists: false } },
{ $expr: { $ne: ['$teLastUpdate', '$lastDataFetchUpdate'] } },
],
}, {
sort: { lastDataFetch: 1 },
projection: { teSymbol: 1, url: 1, lastDataFetch: 1 },
});
if (!candidates?.length) {
logger.debug('No symbols need data fetching');
return { scheduled: 0 };
}
logger.info(`Scheduling ${candidates.length} symbols for TE data fetch`);
for (const doc of candidates) {
await this.scheduleOperation('te-data-fetch', {
teSymbol: doc.teSymbol,
url: doc.url,
isInitialFetch: !doc.lastDataFetch,
}, {
jobId: `data-fetch-${doc.teSymbol}`,
priority: 8,
});
}
return { scheduled: candidates.length };
}