because I got bored of customising my CV for every job
1import { Module } from "@nestjs/common";
2import { ConfigModule } from "@nestjs/config";
3import { EventEmitterModule } from "@nestjs/event-emitter";
4import { DatabaseModule, PrismaService } from "@cv/system";
5import { LoggerProvider, MessengerModule } from "@riotbyte/project-q-nestjs";
6import { PrismaClientToken, PrismaTransportFactory } from "@riotbyte/project-q-prisma";
7import type { WorkerConfig } from "./config";
8import { config } from "./config";
9import { RenderPdfHandler } from "./handlers/render-pdf.handler";
10import { HeartbeatModule } from "./heartbeat/heartbeat.module";
11import { NestProjectQLogger } from "./logger.provider";
12import { HtmlToPdfService } from "./pdf/html-to-pdf.service";
13
14export const WORKER_CONFIG = Symbol("WORKER_CONFIG");
15
16@Module({
17 imports: [
18 ConfigModule.forRoot({
19 isGlobal: true,
20 load: [() => ({ DATABASE_URL: config.databaseUrl })],
21 }),
22 DatabaseModule,
23 EventEmitterModule.forRoot(),
24 HeartbeatModule.register(config),
25 MessengerModule.forRoot({
26 transports: {
27 async: { dsn: `prisma://?queue=${config.queueName}`, retry: true },
28 },
29 routing: new Map<string, "async">([["render-pdf", "async"]]),
30 }),
31 ],
32 providers: [
33 { provide: WORKER_CONFIG, useValue: config satisfies WorkerConfig },
34 { provide: PrismaClientToken, useExisting: PrismaService },
35 { provide: LoggerProvider, useClass: NestProjectQLogger },
36 PrismaTransportFactory,
37 RenderPdfHandler,
38 HtmlToPdfService,
39 ],
40})
41export class WorkerModule {}