"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Report = void 0; const AggregateRoot_1 = require("../../../../shared/domain/AggregateRoot"); const UniqueId_1 = require("../../../../shared/domain/UniqueId"); const ReportStatus_1 = require("../value-objects/ReportStatus"); const ReportRequested_1 = require("../events/ReportRequested"); const ReportGenerated_1 = require("../events/ReportGenerated"); const ReportFailed_1 = require("../events/ReportFailed"); class Report extends AggregateRoot_1.AggregateRoot { static create(props, id) { const reportId = id ?? UniqueId_1.UniqueId.create(); const report = new Report({ ...props, status: ReportStatus_1.ReportStatus.pending(), totalFindings: 0, createdAt: new Date(), }, reportId); report.addDomainEvent(new ReportRequested_1.ReportRequested(reportId.toString(), { title: props.title, format: props.format.value, filters: props.filters, })); return report; } static reconstitute(props, id) { return new Report(props, id); } get title() { return this.props.title; } get format() { return this.props.format; } get status() { return this.props.status; } get filters() { return this.props.filters; } get filePath() { return this.props.filePath; } get errorMessage() { return this.props.errorMessage; } get totalFindings() { return this.props.totalFindings; } get createdAt() { return this.props.createdAt; } get completedAt() { return this.props.completedAt; } markGenerating() { this.props.status = ReportStatus_1.ReportStatus.generating(); } markReady(filePath, totalFindings) { this.props.status = ReportStatus_1.ReportStatus.ready(); this.props.filePath = filePath; this.props.totalFindings = totalFindings; this.props.completedAt = new Date(); this.addDomainEvent(new ReportGenerated_1.ReportGenerated(this.id.toString(), { filePath, totalFindings, format: this.props.format.value, })); } markFailed(errorMessage) { this.props.status = ReportStatus_1.ReportStatus.failed(); this.props.errorMessage = errorMessage; this.props.completedAt = new Date(); this.addDomainEvent(new ReportFailed_1.ReportFailed(this.id.toString(), { errorMessage })); } } exports.Report = Report;