import { Module } from "@nestjs/common"; import { ConfigModule } from "@nestjs/config"; import { EventEmitterModule } from "@nestjs/event-emitter"; import { DatabaseModule, PrismaService } from "@cv/system"; import { LoggerProvider, MessengerModule } from "@riotbyte/project-q-nestjs"; import { PrismaClientToken, PrismaTransportFactory } from "@riotbyte/project-q-prisma"; import type { WorkerConfig } from "./config"; import { config } from "./config"; import { RenderPdfHandler } from "./handlers/render-pdf.handler"; import { HeartbeatModule } from "./heartbeat/heartbeat.module"; import { NestProjectQLogger } from "./logger.provider"; import { HtmlToPdfService } from "./pdf/html-to-pdf.service"; export const WORKER_CONFIG = Symbol("WORKER_CONFIG"); @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [() => ({ DATABASE_URL: config.databaseUrl })], }), DatabaseModule, EventEmitterModule.forRoot(), HeartbeatModule.register(config), MessengerModule.forRoot({ transports: { async: { dsn: `prisma://?queue=${config.queueName}`, retry: true }, }, routing: new Map([["render-pdf", "async"]]), }), ], providers: [ { provide: WORKER_CONFIG, useValue: config satisfies WorkerConfig }, { provide: PrismaClientToken, useExisting: PrismaService }, { provide: LoggerProvider, useClass: NestProjectQLogger }, PrismaTransportFactory, RenderPdfHandler, HtmlToPdfService, ], }) export class WorkerModule {}