because I got bored of customising my CV for every job
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(CVG-50): wire HtmlToPdfService config via HandlersModule.forRoot

Worker has been failing to boot since CVG-38: HandlersModule never registered PDF_SERVICE_CONFIG, so HtmlToPdfService's constructor arg was undefined. Added forRoot factory that takes PdfServiceConfig and provides it; service uses @Inject(PDF_SERVICE_CONFIG). Symbol moved to its own file to break a circular import handlers.module <-> html-to-pdf.service. Worker now boots clean and processes queued render-pdf messages successfully.

+41 -14
+4 -1
apps/worker/src/worker.module.ts
··· 31 31 }), 32 32 DatabaseModule, 33 33 EventEmitterModule.forRoot(), 34 - HandlersModule, 34 + HandlersModule.forRoot({ 35 + chromiumArgs: config.chromiumArgs, 36 + pdfTimeoutMs: config.pdfTimeoutMs, 37 + }), 35 38 HeartbeatModule.register(config), 36 39 FileStorageModule.forRoot( 37 40 config.fileStorageDriver === "r2"
+4
docker-compose.yml
··· 120 120 condition: service_healthy 121 121 volumes: 122 122 - ./apps/worker/src:/app/apps/worker/src 123 + - ./packages/core/src:/app/packages/core/src 124 + - ./packages/cv-renderer/src:/app/packages/cv-renderer/src 125 + - ./packages/file-storage/src:/app/packages/file-storage/src 126 + - ./packages/handlers/src:/app/packages/handlers/src 123 127 - worker-output:/app/pdf-output 124 128 restart: unless-stopped 125 129 healthcheck:
+20 -7
packages/handlers/src/handlers.module.ts
··· 1 - import { Module } from "@nestjs/common"; 1 + import { type DynamicModule, Module } from "@nestjs/common"; 2 + import { 3 + PDF_SERVICE_CONFIG, 4 + type PdfServiceConfig, 5 + } from "./pdf/pdf-service.config"; 2 6 import { HtmlToPdfService } from "./pdf/html-to-pdf.service"; 3 7 import { RenderPdfHandler } from "./render-pdf.handler"; 4 8 5 - export const PDF_SERVICE_CONFIG = Symbol("PDF_SERVICE_CONFIG"); 9 + export { PDF_SERVICE_CONFIG }; 6 10 7 - @Module({ 8 - providers: [RenderPdfHandler, HtmlToPdfService], 9 - exports: [RenderPdfHandler, HtmlToPdfService], 10 - }) 11 - export class HandlersModule {} 11 + @Module({}) 12 + export class HandlersModule { 13 + static forRoot(config: PdfServiceConfig): DynamicModule { 14 + return { 15 + module: HandlersModule, 16 + providers: [ 17 + { provide: PDF_SERVICE_CONFIG, useValue: config }, 18 + HtmlToPdfService, 19 + RenderPdfHandler, 20 + ], 21 + exports: [HtmlToPdfService, RenderPdfHandler], 22 + }; 23 + } 24 + }
+7 -6
packages/handlers/src/pdf/html-to-pdf.service.ts
··· 1 - import { Injectable, Logger, OnModuleDestroy } from "@nestjs/common"; 1 + import { Inject, Injectable, Logger, OnModuleDestroy } from "@nestjs/common"; 2 2 import { chromium } from "playwright"; 3 3 import type { Browser } from "playwright-core"; 4 + import { 5 + PDF_SERVICE_CONFIG, 6 + type PdfServiceConfig, 7 + } from "./pdf-service.config"; 4 8 5 - export interface PdfServiceConfig { 6 - chromiumArgs: readonly string[]; 7 - pdfTimeoutMs: number; 8 - } 9 + export type { PdfServiceConfig }; 9 10 10 11 /** 11 12 * Manages a Playwright browser singleton for HTML-to-PDF conversion. ··· 16 17 private browser: Browser | null = null; 17 18 private readonly config: PdfServiceConfig; 18 19 19 - constructor(config: PdfServiceConfig) { 20 + constructor(@Inject(PDF_SERVICE_CONFIG) config: PdfServiceConfig) { 20 21 this.config = config; 21 22 } 22 23
+6
packages/handlers/src/pdf/pdf-service.config.ts
··· 1 + export const PDF_SERVICE_CONFIG = Symbol("PDF_SERVICE_CONFIG"); 2 + 3 + export interface PdfServiceConfig { 4 + chromiumArgs: readonly string[]; 5 + pdfTimeoutMs: number; 6 + }