From 2e073b1d443c5a14bc019ce14bc654c7e5477e58 Mon Sep 17 00:00:00 2001 From: Boki Date: Fri, 20 Jun 2025 09:25:06 -0400 Subject: [PATCH] more lint fixes --- .../src/services/enhanced-sync-manager.ts | 8 ++- .../src/services/sync-manager.ts | 6 +- apps/web-api/src/types/exchange.types.ts | 2 +- apps/web-api/src/utils/validation.ts | 66 +++++++++++-------- 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/apps/data-sync-service/src/services/enhanced-sync-manager.ts b/apps/data-sync-service/src/services/enhanced-sync-manager.ts index 4e98098..8730c63 100644 --- a/apps/data-sync-service/src/services/enhanced-sync-manager.ts +++ b/apps/data-sync-service/src/services/enhanced-sync-manager.ts @@ -2,6 +2,8 @@ * Enhanced Sync Manager - Improved syncing with comprehensive exchange data */ import { getLogger } from '@stock-bot/logger'; +import { MongoDBClient } from '@stock-bot/mongodb-client'; +import { PostgreSQLClient } from '@stock-bot/postgres-client'; import { getMongoDBClient, getPostgreSQLClient } from '../clients'; const logger = getLogger('enhanced-sync-manager'); @@ -32,8 +34,8 @@ interface SyncStatus { export class EnhancedSyncManager { private isInitialized = false; - private mongoClient: any; - private postgresClient: any; + private mongoClient: MongoDBClient; + private postgresClient: PostgreSQLClient; private exchangeCache: Map = new Map(); async initialize(): Promise { @@ -301,7 +303,7 @@ export class EnhancedSyncManager { // Start transaction await this.postgresClient.query('BEGIN'); - let symbols: any[] = []; + let symbols: Record[] = []; // Get symbols based on provider const db = this.getMongoDatabase(); diff --git a/apps/data-sync-service/src/services/sync-manager.ts b/apps/data-sync-service/src/services/sync-manager.ts index 8d0fe64..884e724 100644 --- a/apps/data-sync-service/src/services/sync-manager.ts +++ b/apps/data-sync-service/src/services/sync-manager.ts @@ -8,8 +8,8 @@ const logger = getLogger('sync-manager'); export class SyncManager { private isInitialized = false; - private mongoClient: any; - private postgresClient: any; + private mongoClient: unknown; + private postgresClient: unknown; async initialize(): Promise { if (this.isInitialized) { @@ -153,7 +153,7 @@ export class SyncManager { /** * Get sync status for all providers */ - async getSyncStatus(): Promise { + async getSyncStatus(): Promise[]> { const query = 'SELECT * FROM sync_status ORDER BY provider, data_type'; const result = await this.postgresClient.query(query); return result.rows; diff --git a/apps/web-api/src/types/exchange.types.ts b/apps/web-api/src/types/exchange.types.ts index c2ebe07..d755efe 100644 --- a/apps/web-api/src/types/exchange.types.ts +++ b/apps/web-api/src/types/exchange.types.ts @@ -94,7 +94,7 @@ export interface ExchangeStats { providers: number; } -export interface ApiResponse { +export interface ApiResponse { success: boolean; data?: T; error?: string; diff --git a/apps/web-api/src/utils/validation.ts b/apps/web-api/src/utils/validation.ts index ea0467e..af767ac 100644 --- a/apps/web-api/src/utils/validation.ts +++ b/apps/web-api/src/utils/validation.ts @@ -7,8 +7,11 @@ export class ValidationError extends Error { } } -export function validateCreateExchange(data: any): CreateExchangeRequest { - const { code, name, country, currency, active = true } = data; +export function validateCreateExchange(data: unknown): CreateExchangeRequest { + if (!data || typeof data !== 'object') { + throw new ValidationError('Invalid data provided', 'data'); + } + const { code, name, country, currency, active = true } = data as Record; if (!code || typeof code !== 'string') { throw new ValidationError('Exchange code is required', 'code'); @@ -47,7 +50,10 @@ export function validateCreateExchange(data: any): CreateExchangeRequest { }; } -export function validateCreateProviderMapping(data: any): CreateProviderMappingRequest { +export function validateCreateProviderMapping(data: unknown): CreateProviderMappingRequest { + if (!data || typeof data !== 'object') { + throw new ValidationError('Invalid data provided', 'data'); + } const { provider, provider_exchange_code, @@ -58,7 +64,7 @@ export function validateCreateProviderMapping(data: any): CreateProviderMappingR confidence = 1.0, active = false, verified = false, - } = data; + } = data as Record; if (!provider || typeof provider !== 'string') { throw new ValidationError('Provider is required', 'provider'); @@ -88,36 +94,40 @@ export function validateCreateProviderMapping(data: any): CreateProviderMappingR }; } -export function validateUpdateExchange(data: any): any { - const updates: any = {}; +export function validateUpdateExchange(data: unknown): Record { + if (!data || typeof data !== 'object') { + throw new ValidationError('Invalid data provided', 'data'); + } + const typedData = data as Record; + const updates: Record = {}; - if (data.name !== undefined) { - if (typeof data.name !== 'string') { + if (typedData.name !== undefined) { + if (typeof typedData.name !== 'string') { throw new ValidationError('Name must be a string', 'name'); } - updates.name = data.name.trim(); + updates.name = typedData.name.trim(); } - if (data.active !== undefined) { - updates.active = Boolean(data.active); + if (typedData.active !== undefined) { + updates.active = Boolean(typedData.active); } - if (data.visible !== undefined) { - updates.visible = Boolean(data.visible); + if (typedData.visible !== undefined) { + updates.visible = Boolean(typedData.visible); } - if (data.country !== undefined) { - if (typeof data.country !== 'string' || data.country.length !== 2) { + if (typedData.country !== undefined) { + if (typeof typedData.country !== 'string' || typedData.country.length !== 2) { throw new ValidationError('Country must be exactly 2 characters', 'country'); } - updates.country = data.country.toUpperCase().trim(); + updates.country = typedData.country.toUpperCase().trim(); } - if (data.currency !== undefined) { - if (typeof data.currency !== 'string' || data.currency.length !== 3) { + if (typedData.currency !== undefined) { + if (typeof typedData.currency !== 'string' || typedData.currency.length !== 3) { throw new ValidationError('Currency must be exactly 3 characters', 'currency'); } - updates.currency = data.currency.toUpperCase().trim(); + updates.currency = typedData.currency.toUpperCase().trim(); } if (Object.keys(updates).length === 0) { @@ -130,27 +140,27 @@ export function validateUpdateExchange(data: any): any { export function validateUpdateProviderMapping(data: any): any { const updates: any = {}; - if (data.active !== undefined) { - updates.active = Boolean(data.active); + if (typedData.active !== undefined) { + updates.active = Boolean(typedData.active); } - if (data.verified !== undefined) { - updates.verified = Boolean(data.verified); + if (typedData.verified !== undefined) { + updates.verified = Boolean(typedData.verified); } - if (data.confidence !== undefined) { - const confidence = Number(data.confidence); + if (typedData.confidence !== undefined) { + const confidence = Number(typedData.confidence); if (isNaN(confidence) || confidence < 0 || confidence > 1) { throw new ValidationError('Confidence must be a number between 0 and 1', 'confidence'); } updates.confidence = confidence; } - if (data.master_exchange_id !== undefined) { - if (typeof data.master_exchange_id !== 'string') { + if (typedData.master_exchange_id !== undefined) { + if (typeof typedData.master_exchange_id !== 'string') { throw new ValidationError('Master exchange ID must be a string', 'master_exchange_id'); } - updates.master_exchange_id = data.master_exchange_id.trim(); + updates.master_exchange_id = typedData.master_exchange_id.trim(); } if (Object.keys(updates).length === 0) {