"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.REPORT_JOB_TYPE = void 0; exports.createReportJobHandler = createReportJobHandler; const HTMLReportGenerator_1 = require("../../modules/reporting/infrastructure/generators/HTMLReportGenerator"); const JSONReportGenerator_1 = require("../../modules/reporting/infrastructure/generators/JSONReportGenerator"); const PDFReportGenerator_1 = require("../../modules/reporting/infrastructure/generators/PDFReportGenerator"); exports.REPORT_JOB_TYPE = 'report:generate'; function createReportJobHandler(deps) { const htmlGen = new HTMLReportGenerator_1.HTMLReportGenerator(); const jsonGen = new JSONReportGenerator_1.JSONReportGenerator(); const pdfGen = new PDFReportGenerator_1.PDFReportGenerator(); return async (payload) => { const log = deps.logger.child({ jobType: exports.REPORT_JOB_TYPE, reportId: payload.reportId }); log.info({ format: payload.format }, 'Report generation job executing'); const report = await deps.reportRepository.findById(payload.reportId); if (!report) { throw new Error(`Report not found: ${payload.reportId}`); } report.markGenerating(); await deps.reportRepository.update(report); // Load findings with filters from report const findings = await deps.findingRepository.findAll({ sessionId: report.filters.sessionId, severity: report.filters.severity, }); let filePath; try { if (payload.format === 'pdf') { filePath = await pdfGen.generate(report, findings); } else if (payload.format === 'json') { filePath = await jsonGen.generate(report, findings); } else { filePath = await htmlGen.generate(report, findings); } } catch (err) { const msg = err instanceof Error ? err.message : String(err); report.markFailed(msg); await deps.reportRepository.update(report); throw err; } report.markReady(filePath, findings.length); await deps.reportRepository.update(report); log.info({ filePath, totalFindings: findings.length }, 'Report job complete'); return { reportId: payload.reportId, filePath }; }; }