made provider registry functional
This commit is contained in:
parent
aed5ff3d98
commit
423b40866c
1 changed files with 50 additions and 25 deletions
|
|
@ -29,50 +29,60 @@ export interface ProviderConfig {
|
|||
scheduledJobs?: ScheduledJob[];
|
||||
}
|
||||
|
||||
export class ProviderRegistry {
|
||||
private logger = getLogger('provider-registry');
|
||||
private providers = new Map<string, ProviderConfig>();
|
||||
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<string, ProviderConfig>();
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue