diff --git a/apps/data-service/src/services/provider-registry.service.ts b/apps/data-service/src/services/provider-registry.service.ts index 59fdcbd..00a395c 100644 --- a/apps/data-service/src/services/provider-registry.service.ts +++ b/apps/data-service/src/services/provider-registry.service.ts @@ -29,50 +29,60 @@ export interface ProviderConfig { scheduledJobs?: ScheduledJob[]; } -export class ProviderRegistry { - private logger = getLogger('provider-registry'); - private providers = new Map(); +export interface ProviderRegistry { + registerProvider: (config: ProviderConfig) => void; + getHandler: (provider: string, operation: string) => JobHandler | null; + getAllScheduledJobs: () => Array<{ provider: string; job: ScheduledJob }>; + getProviders: () => Array<{ key: string; config: ProviderConfig }>; + hasProvider: (provider: string) => boolean; + clear: () => void; +} + +/** + * Create a new provider registry instance + */ +export function createProviderRegistry(): ProviderRegistry { + const logger = getLogger('provider-registry'); + const providers = new Map(); /** * Register a provider with its operations - */ - registerProvider(config: ProviderConfig): void { - // const key = `${config.service}:${config.name}`; - this.providers.set(config.name, config); - this.logger.info(`Registered provider: ${config.name}`, { + */ + function registerProvider(config: ProviderConfig): void { + providers.set(config.name, config); + logger.info(`Registered provider: ${config.name}`, { operations: Object.keys(config.operations), scheduledJobs: config.scheduledJobs?.length || 0 }); } + /** * Get a job handler for a specific provider and operation */ - getHandler(provider: string, operation: string): JobHandler | null { - const providerConfig = this.providers.get(provider); + function getHandler(provider: string, operation: string): JobHandler | null { + const providerConfig = providers.get(provider); if (!providerConfig) { - this.logger.warn(`Provider not found: ${provider}`); + logger.warn(`Provider not found: ${provider}`); return null; } const handler = providerConfig.operations[operation]; if (!handler) { - this.logger.warn(`Operation not found: ${operation} in provider ${provider}`); + logger.warn(`Operation not found: ${operation} in provider ${provider}`); return null; } return handler; } + /** * Get all scheduled jobs from all providers */ - getAllScheduledJobs(): Array<{ - provider: string; - job: ScheduledJob; - }> { + function getAllScheduledJobs(): Array<{ provider: string; job: ScheduledJob }> { const allJobs: Array<{ provider: string; job: ScheduledJob }> = []; - for (const [key, config] of this.providers) { + for (const [key, config] of providers) { if (config.scheduledJobs) { for (const job of config.scheduledJobs) { allJobs.push({ @@ -86,25 +96,40 @@ export class ProviderRegistry { return allJobs; } - getProviders(): Array<{ key: string; config: ProviderConfig }> { - return Array.from(this.providers.entries()).map(([key, config]) => ({ + /** + * Get all registered providers with their configurations + */ + function getProviders(): Array<{ key: string; config: ProviderConfig }> { + return Array.from(providers.entries()).map(([key, config]) => ({ key, config })); } + /** * Check if a provider exists */ - hasProvider(provider: string): boolean { - return this.providers.has(provider); + function hasProvider(provider: string): boolean { + return providers.has(provider); } + /** * Clear all providers (useful for testing) */ - clear(): void { - this.providers.clear(); - this.logger.info('All providers cleared'); + function clear(): void { + providers.clear(); + logger.info('All providers cleared'); } + + return { + registerProvider, + getHandler, + getAllScheduledJobs, + getProviders, + hasProvider, + clear + }; } -export const providerRegistry = new ProviderRegistry(); +// Create the default shared registry instance +export const providerRegistry = createProviderRegistry();