2026-05-17 19:08:07 +08:00
|
|
|
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';
|
2026-05-09 18:25:04 +08:00
|
|
|
|
2026-05-17 19:08:07 +08:00
|
|
|
@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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|