fase(15): reporting module with pdf generation
This commit is contained in:
42
dist/jobs/workers/ReportWorker.js
vendored
42
dist/jobs/workers/ReportWorker.js
vendored
@@ -2,15 +2,49 @@
|
||||
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');
|
||||
// Full implementation in Phase 15 (Reporting Module)
|
||||
// For now, return a placeholder result
|
||||
const filePath = `./reports/${payload.reportId}.${payload.format}`;
|
||||
log.info({ filePath }, 'Report job complete');
|
||||
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 };
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user