Files

34 lines
1.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenerateReportCommand = void 0;
const Result_1 = require("../../../../shared/domain/Result");
const Report_1 = require("../../domain/entities/Report");
const ReportFormat_1 = require("../../domain/value-objects/ReportFormat");
class GenerateReportCommand {
constructor(reportRepository, eventBus) {
this.reportRepository = reportRepository;
this.eventBus = eventBus;
}
async execute(request) {
let format;
try {
format = ReportFormat_1.ReportFormat.fromString(request.format);
}
catch {
return (0, Result_1.Err)(`Invalid format: ${request.format}`);
}
const report = Report_1.Report.create({
title: request.title,
format,
filters: request.filters ?? {},
});
await this.reportRepository.save(report);
const events = report.clearEvents();
for (const event of events) {
await this.eventBus.publish(event);
}
return (0, Result_1.Ok)({ reportId: report.id.toString(), status: report.status.value });
}
}
exports.GenerateReportCommand = GenerateReportCommand;