361446d79c
* Add cron to message queue interfaces * Add command to launch cron job * Add command to stop cron job * Update clean inactive workspaces job * Isolate cron mechanism * Code review returns * Remove useless object.assign * Add MessageQueuCronJobData interface * Rename cron job utils * Fix typing
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { DynamicModule, Global } from '@nestjs/common';
|
|
|
|
import { MessageQueueDriver } from 'src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface';
|
|
|
|
import {
|
|
MessageQueueDriverType,
|
|
MessageQueueModuleAsyncOptions,
|
|
} from 'src/integrations/message-queue/interfaces';
|
|
import {
|
|
MessageQueue,
|
|
QUEUE_DRIVER,
|
|
} from 'src/integrations/message-queue/message-queue.constants';
|
|
import { PgBossDriver } from 'src/integrations/message-queue/drivers/pg-boss.driver';
|
|
import { MessageQueueService } from 'src/integrations/message-queue/services/message-queue.service';
|
|
import { BullMQDriver } from 'src/integrations/message-queue/drivers/bullmq.driver';
|
|
import { SyncDriver } from 'src/integrations/message-queue/drivers/sync.driver';
|
|
import { JobsModule } from 'src/integrations/message-queue/jobs.module';
|
|
|
|
@Global()
|
|
export class MessageQueueModule {
|
|
static forRoot(options: MessageQueueModuleAsyncOptions): DynamicModule {
|
|
const providers = [
|
|
...Object.values(MessageQueue).map((queue) => ({
|
|
provide: queue,
|
|
useFactory: (driver: MessageQueueDriver) => {
|
|
return new MessageQueueService(driver, queue);
|
|
},
|
|
inject: [QUEUE_DRIVER],
|
|
})),
|
|
{
|
|
provide: QUEUE_DRIVER,
|
|
useFactory: async (...args: any[]) => {
|
|
const config = await options.useFactory(...args);
|
|
|
|
switch (config.type) {
|
|
case MessageQueueDriverType.PgBoss:
|
|
const boss = new PgBossDriver(config.options);
|
|
|
|
await boss.init();
|
|
|
|
return boss;
|
|
|
|
case MessageQueueDriverType.BullMQ:
|
|
return new BullMQDriver(config.options);
|
|
|
|
default:
|
|
return new SyncDriver(JobsModule.moduleRef);
|
|
}
|
|
},
|
|
inject: options.inject || [],
|
|
},
|
|
];
|
|
|
|
return {
|
|
module: MessageQueueModule,
|
|
imports: [JobsModule, ...(options.imports || [])],
|
|
providers,
|
|
exports: Object.values(MessageQueue),
|
|
};
|
|
}
|
|
}
|