import { Processor, WorkerHost } from '@nestjs/bullmq'; import { Logger } from '@nestjs/common'; import { Job } from 'bullmq'; import { QUEUE_DOCUMENT_IMPORT } from '../infrastructure/queue/queue.service'; import { DocumentImportRepository } from '../modules/document-import/document-import.repository'; @Processor(QUEUE_DOCUMENT_IMPORT) export class DocumentImportWorker extends WorkerHost { private readonly logger = new Logger(DocumentImportWorker.name); constructor( private readonly repository: DocumentImportRepository, ) { super(); } async process(job: Job<{ importId: string; userId: string }>) { this.logger.log(`Processing document import job ${job.id}, importId=${job.data.importId}`); await this.repository.updateStatus(job.data.importId, 'processing'); try { // TODO: actual file parsing + AI knowledge generation await new Promise((resolve) => setTimeout(resolve, 1000)); await this.repository.updateStatus(job.data.importId, 'completed'); this.logger.log(`Document import job ${job.id} completed`); } catch (err: any) { this.logger.error(`Document import job ${job.id} failed: ${err.message}`); await this.repository.updateStatus(job.data.importId, 'failed'); throw err; } } }