60 lines
2.4 KiB
JavaScript
60 lines
2.4 KiB
JavaScript
"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;
|