stock-bot/apps/stock/data-pipeline/src/handlers/exchanges/operations/exchange-stats.operations.ts

38 lines
1.1 KiB
TypeScript

import type { IServiceContainer } from '@stock-bot/handlers';
import { getLogger } from '@stock-bot/logger';
import type { JobPayload } from '../../../types/job-payloads';
const logger = getLogger('enhanced-sync-exchange-stats');
interface ExchangeStats {
total_exchanges: string;
active_exchanges: string;
countries: string;
currencies: string;
}
export async function getExchangeStats(
payload: JobPayload,
container: IServiceContainer
): Promise<ExchangeStats> {
logger.info('Getting exchange statistics...');
try {
const postgresClient = container.postgres;
const query = `
SELECT
COUNT(*) as total_exchanges,
COUNT(CASE WHEN active = true THEN 1 END) as active_exchanges,
COUNT(DISTINCT country) as countries,
COUNT(DISTINCT currency) as currencies
FROM exchanges
`;
const result = await postgresClient.query(query);
logger.info('Retrieved exchange statistics');
return result.rows[0];
} catch (error) {
logger.error('Failed to get exchange statistics', { error });
throw error;
}
}