Ответ
Заявка на отчет (ReportRequest) — это агрегат или корневая сущность (Entity) в контексте сервиса отчетности. Она инкапсулирует состояние и данные всего запроса на генерацию отчета.
Типичные атрибуты:
id(UUID или Long) — уникальный идентификатор.type(Enum) — тип формируемого отчета (PDF, Excel, CSV).status(Enum) — состояние жизненного цикла:CREATED,PROCESSING,COMPLETED,FAILED.parameters(JSON или Value Object) — критерии выборки данных (фильтры, диапазон дат).resultUrlилиresultFileId— ссылка на сгенерированный артефакт.createdAt,updatedAt— метки времени.
Пример модели на Java с JPA:
@Entity
@Table(name = "report_requests")
public class ReportRequest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
private ReportType type;
@Enumerated(EnumType.STRING)
private ReportStatus status = ReportStatus.CREATED;
@Column(columnDefinition = "jsonb") // Для PostgreSQL
private String parameters;
private String resultObjectKey; // Ключ в S3/MinIO
// Геттеры, сеттеры, бизнес-метод для запуска обработки
public void startProcessing() {
this.status = ReportStatus.PROCESSING;
}
}
Почему агрегат? Заявка управляет своим инвариантом (например, нельзя завершить не начатую заявку) и может координировать работу внутренних объектов. Часто интегрируется с очередями (Kafka/RabbitMQ) для асинхронной обработки тяжелых отчетов.