simplified providers a bit
This commit is contained in:
parent
35b0eb3783
commit
4aa2942e43
9 changed files with 48 additions and 209 deletions
|
|
@ -4,6 +4,15 @@ export interface JobHandler {
|
|||
(payload: any): Promise<any>;
|
||||
}
|
||||
|
||||
export interface JobData {
|
||||
type?: string;
|
||||
provider: string;
|
||||
operation: string;
|
||||
payload: any;
|
||||
priority?: number;
|
||||
immediately?: boolean;
|
||||
}
|
||||
|
||||
export interface ScheduledJob {
|
||||
type: string;
|
||||
operation: string;
|
||||
|
|
@ -16,7 +25,6 @@ export interface ScheduledJob {
|
|||
|
||||
export interface ProviderConfig {
|
||||
name: string;
|
||||
service: string;
|
||||
operations: Record<string, JobHandler>;
|
||||
scheduledJobs?: ScheduledJob[];
|
||||
}
|
||||
|
|
@ -27,51 +35,47 @@ export class ProviderRegistry {
|
|||
|
||||
/**
|
||||
* Register a provider with its operations
|
||||
*/ registerProvider(config: ProviderConfig): void {
|
||||
const key = `${config.service}:${config.name}`;
|
||||
this.providers.set(key, config);
|
||||
this.logger.info(`Registered provider: ${key}`, {
|
||||
*/
|
||||
registerProvider(config: ProviderConfig): void {
|
||||
// const key = `${config.service}:${config.name}`;
|
||||
this.providers.set(config.name, config);
|
||||
this.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(service: string, provider: string, operation: string): JobHandler | null {
|
||||
const key = `${service}:${provider}`;
|
||||
const providerConfig = this.providers.get(key);
|
||||
getHandler(provider: string, operation: string): JobHandler | null {
|
||||
const providerConfig = this.providers.get(provider);
|
||||
|
||||
if (!providerConfig) {
|
||||
this.logger.warn(`Provider not found: ${key}`);
|
||||
this.logger.warn(`Provider not found: ${provider}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const handler = providerConfig.operations[operation];
|
||||
if (!handler) {
|
||||
this.logger.warn(`Operation not found: ${operation} in provider ${key}`);
|
||||
this.logger.warn(`Operation not found: ${operation} in provider ${provider}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all registered providers
|
||||
* Get all scheduled jobs from all providers
|
||||
*/
|
||||
getAllScheduledJobs(): Array<{
|
||||
service: string;
|
||||
provider: string;
|
||||
job: ScheduledJob;
|
||||
}> {
|
||||
const allJobs: Array<{ service: string; provider: string; job: ScheduledJob }> = [];
|
||||
const allJobs: Array<{ provider: string; job: ScheduledJob }> = [];
|
||||
|
||||
for (const [key, config] of this.providers) {
|
||||
if (config.scheduledJobs) {
|
||||
for (const job of config.scheduledJobs) {
|
||||
allJobs.push({
|
||||
service: config.service,
|
||||
provider: config.name,
|
||||
job
|
||||
});
|
||||
|
|
@ -88,21 +92,12 @@ export class ProviderRegistry {
|
|||
config
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a provider exists
|
||||
*/
|
||||
hasProvider(service: string, provider: string): boolean {
|
||||
return this.providers.has(`${service}:${provider}`);
|
||||
hasProvider(provider: string): boolean {
|
||||
return this.providers.has(provider);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get providers by service type
|
||||
*/
|
||||
getProvidersByService(service: string): ProviderConfig[] {
|
||||
return Array.from(this.providers.values()).filter(provider => provider.service === service);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all providers (useful for testing)
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue