fixed some lint issues
This commit is contained in:
parent
566f5dac92
commit
969cbad7ac
14 changed files with 99 additions and 29 deletions
|
|
@ -34,10 +34,11 @@ export function initializeStockConfig(serviceName?: 'dataIngestion' | 'dataPipel
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
} catch (error: any) {
|
} catch (error) {
|
||||||
const logger = getLogger('stock-config');
|
const logger = getLogger('stock-config');
|
||||||
logger.error('Failed to initialize stock configuration:', error.message);
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
||||||
if (error.errors) {
|
logger.error('Failed to initialize stock configuration:', errorMessage);
|
||||||
|
if (error && typeof error === 'object' && 'errors' in error) {
|
||||||
logger.error('Validation errors:', error.errors);
|
logger.error('Validation errors:', error.errors);
|
||||||
}
|
}
|
||||||
throw error;
|
throw error;
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,23 @@ export async function updateCeoChannels(
|
||||||
const totalChannels = results.channel_categories[0].total_channels;
|
const totalChannels = results.channel_categories[0].total_channels;
|
||||||
const totalPages = Math.ceil(totalChannels / channels.length);
|
const totalPages = Math.ceil(totalChannels / channels.length);
|
||||||
const exchanges: { exchange: string; countryCode: string }[] = [];
|
const exchanges: { exchange: string; countryCode: string }[] = [];
|
||||||
const symbols = channels.map((channel: any) => {
|
interface Channel {
|
||||||
|
symbol: string;
|
||||||
|
exchange: string;
|
||||||
|
title: string;
|
||||||
|
type: string;
|
||||||
|
channel: string;
|
||||||
|
spiel_count: number;
|
||||||
|
unread_count: number;
|
||||||
|
is_following: boolean;
|
||||||
|
last_viewed_timestamp: string;
|
||||||
|
last_timestamp: string;
|
||||||
|
company_details?: Record<string, unknown>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const symbols = channels.map((channel: Channel) => {
|
||||||
// check if exchange is in the exchanges array object
|
// check if exchange is in the exchanges array object
|
||||||
if (!exchanges.find((e: any) => e.exchange === channel.exchange)) {
|
if (!exchanges.find((e) => e.exchange === channel.exchange)) {
|
||||||
exchanges.push({
|
exchanges.push({
|
||||||
exchange: channel.exchange,
|
exchange: channel.exchange,
|
||||||
countryCode: 'CA',
|
countryCode: 'CA',
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import type { CeoHandler } from '../ceo.handler';
|
||||||
export async function updateUniqueSymbols(
|
export async function updateUniqueSymbols(
|
||||||
this: CeoHandler,
|
this: CeoHandler,
|
||||||
_payload: unknown,
|
_payload: unknown,
|
||||||
_context: any
|
_context: unknown
|
||||||
): Promise<unknown> {
|
): Promise<unknown> {
|
||||||
this.logger.info('Starting update to get unique CEO symbols by ceoId');
|
this.logger.info('Starting update to get unique CEO symbols by ceoId');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ export async function initializeAllHandlers(serviceContainer: IServiceContainer)
|
||||||
/**
|
/**
|
||||||
* Manual fallback registration
|
* Manual fallback registration
|
||||||
*/
|
*/
|
||||||
async function manualHandlerRegistration(_serviceContainer: any): Promise<void> {
|
async function manualHandlerRegistration(_serviceContainer: IServiceContainer): Promise<void> {
|
||||||
logger.warn('Falling back to manual handler registration');
|
logger.warn('Falling back to manual handler registration');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,25 @@
|
||||||
|
|
||||||
import type { IServiceContainer } from '@stock-bot/handlers';
|
import type { IServiceContainer } from '@stock-bot/handlers';
|
||||||
|
|
||||||
export async function fetchExchanges(services: IServiceContainer): Promise<any[]> {
|
interface QMExchange {
|
||||||
|
_id?: string;
|
||||||
|
code: string;
|
||||||
|
name: string;
|
||||||
|
country: string;
|
||||||
|
currency: string;
|
||||||
|
timezone?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function fetchExchanges(services: IServiceContainer): Promise<QMExchange[]> {
|
||||||
// Get exchanges from MongoDB
|
// Get exchanges from MongoDB
|
||||||
const exchanges = await services.mongodb.collection('qm_exchanges').find({}).toArray();
|
const exchanges = await services.mongodb.collection<QMExchange>('qm_exchanges').find({}).toArray();
|
||||||
|
|
||||||
return exchanges;
|
return exchanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getExchangeByCode(services: IServiceContainer, code: string): Promise<any> {
|
export async function getExchangeByCode(services: IServiceContainer, code: string): Promise<QMExchange | null> {
|
||||||
// Get specific exchange by code
|
// Get specific exchange by code
|
||||||
const exchange = await services.mongodb.collection('qm_exchanges').findOne({ code });
|
const exchange = await services.mongodb.collection<QMExchange>('qm_exchanges').findOne({ code });
|
||||||
|
|
||||||
return exchange;
|
return exchange;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,14 @@ export async function checkSessions(handler: BaseHandler): Promise<{
|
||||||
/**
|
/**
|
||||||
* Create a single session for a specific session ID
|
* Create a single session for a specific session ID
|
||||||
*/
|
*/
|
||||||
|
interface CreateSessionInput {
|
||||||
|
sessionId?: string;
|
||||||
|
sessionType?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export async function createSingleSession(
|
export async function createSingleSession(
|
||||||
handler: BaseHandler,
|
handler: BaseHandler,
|
||||||
input: any
|
input: CreateSessionInput
|
||||||
): Promise<{ sessionId: string; status: string; sessionType: string }> {
|
): Promise<{ sessionId: string; status: string; sessionType: string }> {
|
||||||
const { sessionId: _sessionId, sessionType } = input || {};
|
const { sessionId: _sessionId, sessionType } = input || {};
|
||||||
const _sessionManager = QMSessionManager.getInstance();
|
const _sessionManager = QMSessionManager.getInstance();
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,26 @@
|
||||||
|
|
||||||
import type { IServiceContainer } from '@stock-bot/handlers';
|
import type { IServiceContainer } from '@stock-bot/handlers';
|
||||||
|
|
||||||
export async function searchSymbols(services: IServiceContainer): Promise<any[]> {
|
interface QMSymbol {
|
||||||
|
_id?: string;
|
||||||
|
symbol: string;
|
||||||
|
name: string;
|
||||||
|
exchange: string;
|
||||||
|
type?: string;
|
||||||
|
sector?: string;
|
||||||
|
industry?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function searchSymbols(services: IServiceContainer): Promise<QMSymbol[]> {
|
||||||
// Get symbols from MongoDB
|
// Get symbols from MongoDB
|
||||||
const symbols = await services.mongodb.collection('qm_symbols').find({}).limit(50).toArray();
|
const symbols = await services.mongodb.collection<QMSymbol>('qm_symbols').find({}).limit(50).toArray();
|
||||||
|
|
||||||
return symbols;
|
return symbols;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchSymbolData(services: IServiceContainer, symbol: string): Promise<any> {
|
export async function fetchSymbolData(services: IServiceContainer, symbol: string): Promise<QMSymbol | null> {
|
||||||
// Fetch data for a specific symbol
|
// Fetch data for a specific symbol
|
||||||
const symbolData = await services.mongodb.collection('qm_symbols').findOne({ symbol });
|
const symbolData = await services.mongodb.collection<QMSymbol>('qm_symbols').findOne({ symbol });
|
||||||
|
|
||||||
return symbolData;
|
return symbolData;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
* Simplified entry point using ServiceApplication framework
|
* Simplified entry point using ServiceApplication framework
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { initializeStockConfig } from '@stock-bot/stock-config';
|
import { initializeStockConfig, type StockAppConfig } from '@stock-bot/stock-config';
|
||||||
import {
|
import {
|
||||||
ServiceApplication,
|
ServiceApplication,
|
||||||
} from '@stock-bot/di';
|
} from '@stock-bot/di';
|
||||||
|
|
@ -52,7 +52,7 @@ const app = new ServiceApplication(
|
||||||
);
|
);
|
||||||
|
|
||||||
// Container factory function
|
// Container factory function
|
||||||
async function createContainer(config: any) {
|
async function createContainer(config: StockAppConfig) {
|
||||||
const { ServiceContainerBuilder } = await import('@stock-bot/di');
|
const { ServiceContainerBuilder } = await import('@stock-bot/di');
|
||||||
|
|
||||||
const container = await new ServiceContainerBuilder()
|
const container = await new ServiceContainerBuilder()
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,17 @@ import type { JobPayload } from '../../../types/job-payloads';
|
||||||
|
|
||||||
const logger = getLogger('enhanced-sync-exchange-stats');
|
const logger = getLogger('enhanced-sync-exchange-stats');
|
||||||
|
|
||||||
|
interface ExchangeStats {
|
||||||
|
total_exchanges: string;
|
||||||
|
active_exchanges: string;
|
||||||
|
countries: string;
|
||||||
|
currencies: string;
|
||||||
|
}
|
||||||
|
|
||||||
export async function getExchangeStats(
|
export async function getExchangeStats(
|
||||||
payload: JobPayload,
|
payload: JobPayload,
|
||||||
container: IServiceContainer
|
container: IServiceContainer
|
||||||
): Promise<any> {
|
): Promise<ExchangeStats> {
|
||||||
logger.info('Getting exchange statistics...');
|
logger.info('Getting exchange statistics...');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,19 @@ import type { JobPayload } from '../../../types/job-payloads';
|
||||||
|
|
||||||
const logger = getLogger('enhanced-sync-provider-mapping-stats');
|
const logger = getLogger('enhanced-sync-provider-mapping-stats');
|
||||||
|
|
||||||
|
interface ProviderMappingStats {
|
||||||
|
provider: string;
|
||||||
|
total_mappings: string;
|
||||||
|
active_mappings: string;
|
||||||
|
verified_mappings: string;
|
||||||
|
auto_mapped: string;
|
||||||
|
avg_confidence: string;
|
||||||
|
}
|
||||||
|
|
||||||
export async function getProviderMappingStats(
|
export async function getProviderMappingStats(
|
||||||
payload: JobPayload,
|
payload: JobPayload,
|
||||||
container: IServiceContainer
|
container: IServiceContainer
|
||||||
): Promise<any> {
|
): Promise<ProviderMappingStats[]> {
|
||||||
logger.info('Getting provider mapping statistics...');
|
logger.info('Getting provider mapping statistics...');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -53,13 +53,30 @@ export async function syncQMExchanges(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper functions
|
// Helper functions
|
||||||
async function findExchange(exchangeCode: string, postgresClient: any): Promise<any> {
|
interface Exchange {
|
||||||
|
id: string;
|
||||||
|
code: string;
|
||||||
|
name: string;
|
||||||
|
country: string;
|
||||||
|
currency: string;
|
||||||
|
visible: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function findExchange(exchangeCode: string, postgresClient: IServiceContainer['postgres']): Promise<Exchange | null> {
|
||||||
const query = 'SELECT * FROM exchanges WHERE code = $1';
|
const query = 'SELECT * FROM exchanges WHERE code = $1';
|
||||||
const result = await postgresClient.query(query, [exchangeCode]);
|
const result = await postgresClient.query(query, [exchangeCode]);
|
||||||
return result.rows[0] || null;
|
return result.rows[0] || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createExchange(qmExchange: any, postgresClient: any): Promise<void> {
|
interface QMExchange {
|
||||||
|
exchangeCode?: string;
|
||||||
|
exchange?: string;
|
||||||
|
exchangeShortName?: string;
|
||||||
|
name?: string;
|
||||||
|
countryCode?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function createExchange(qmExchange: QMExchange, postgresClient: IServiceContainer['postgres']): Promise<void> {
|
||||||
const query = `
|
const query = `
|
||||||
INSERT INTO exchanges (code, name, country, currency, visible)
|
INSERT INTO exchanges (code, name, country, currency, visible)
|
||||||
VALUES ($1, $2, $3, $4, $5)
|
VALUES ($1, $2, $3, $4, $5)
|
||||||
|
|
@ -77,8 +94,8 @@ async function createExchange(qmExchange: any, postgresClient: any): Promise<voi
|
||||||
|
|
||||||
async function updateExchange(
|
async function updateExchange(
|
||||||
exchangeId: string,
|
exchangeId: string,
|
||||||
qmExchange: any,
|
qmExchange: QMExchange,
|
||||||
postgresClient: any
|
postgresClient: IServiceContainer['postgres']
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const query = `
|
const query = `
|
||||||
UPDATE exchanges
|
UPDATE exchanges
|
||||||
|
|
@ -99,7 +116,7 @@ async function updateSyncStatus(
|
||||||
provider: string,
|
provider: string,
|
||||||
dataType: string,
|
dataType: string,
|
||||||
count: number,
|
count: number,
|
||||||
postgresClient: any
|
postgresClient: IServiceContainer['postgres']
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const query = `
|
const query = `
|
||||||
UPDATE sync_status
|
UPDATE sync_status
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { asClass, asFunction, asValue, type AwilixContainer } from 'awilix';
|
import { asClass, asFunction, asValue, type AwilixContainer } from 'awilix';
|
||||||
import { Browser } from '@stock-bot/browser';
|
import { Browser } from '@stock-bot/browser';
|
||||||
import { ProxyManager } from '@stock-bot/proxy';
|
import { ProxyManager } from '@stock-bot/proxy';
|
||||||
import { NamespacedCache } from '@stock-bot/cache';
|
|
||||||
import type { AppConfig } from '../config/schemas';
|
import type { AppConfig } from '../config/schemas';
|
||||||
import type { ServiceDefinitions } from '../container/types';
|
import type { ServiceDefinitions } from '../container/types';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { Hono } from 'hono';
|
||||||
import { cors } from 'hono/cors';
|
import { cors } from 'hono/cors';
|
||||||
import { getLogger, setLoggerConfig, shutdownLoggers, type Logger } from '@stock-bot/logger';
|
import { getLogger, setLoggerConfig, shutdownLoggers, type Logger } from '@stock-bot/logger';
|
||||||
import { Shutdown } from '@stock-bot/shutdown';
|
import { Shutdown } from '@stock-bot/shutdown';
|
||||||
import type { BaseAppConfig as StockBotAppConfig, UnifiedAppConfig } from '@stock-bot/config';
|
import type { BaseAppConfig, UnifiedAppConfig } from '@stock-bot/config';
|
||||||
import { toUnifiedConfig } from '@stock-bot/config';
|
import { toUnifiedConfig } from '@stock-bot/config';
|
||||||
import type { IServiceContainer } from '@stock-bot/types';
|
import type { IServiceContainer } from '@stock-bot/types';
|
||||||
import type { ServiceContainer } from './awilix-container';
|
import type { ServiceContainer } from './awilix-container';
|
||||||
|
|
@ -78,7 +78,7 @@ export class ServiceApplication {
|
||||||
private shutdown: Shutdown;
|
private shutdown: Shutdown;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
config: StockBotAppConfig | UnifiedAppConfig,
|
config: BaseAppConfig | UnifiedAppConfig,
|
||||||
serviceConfig: ServiceApplicationConfig,
|
serviceConfig: ServiceApplicationConfig,
|
||||||
hooks: ServiceLifecycleHooks = {}
|
hooks: ServiceLifecycleHooks = {}
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import type {
|
||||||
QueueOptions,
|
QueueOptions,
|
||||||
QueueStats,
|
QueueStats,
|
||||||
RateLimitRule,
|
RateLimitRule,
|
||||||
RedisConfig,
|
|
||||||
} from './types';
|
} from './types';
|
||||||
import { getRedisConnection } from './utils';
|
import { getRedisConnection } from './utils';
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue