feat(timeline): add DerivedEventType enum and TimelineEntryDTO record
DerivedEventType: BIRTH / DEATH / MARRIAGE discriminator for derived events. TimelineEntryDTO: unified String-id DTO for both curated and derived events; id is String (not UUID) to accommodate synthetic prefixed ids (birth:/death:/marriage:). Refs #776 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
package org.raddatz.familienarchiv.timeline;
|
||||
|
||||
/** Discriminator for derived life-events assembled from Person / PersonRelationship data. */
|
||||
public enum DerivedEventType {
|
||||
BIRTH,
|
||||
DEATH,
|
||||
MARRIAGE
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.raddatz.familienarchiv.timeline;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.raddatz.familienarchiv.document.DatePrecision;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* Unified DTO for timeline entries — covers both curated {@link TimelineEvent} rows
|
||||
* ({@code derived=false}) and derived life-events assembled from Person/relationship data
|
||||
* ({@code derived=true}).
|
||||
*
|
||||
* <p>The {@code id} field is typed {@code String}, not {@code UUID}, because derived events
|
||||
* carry synthetic prefixed ids ({@code birth:{uuid}}, {@code death:{uuid}},
|
||||
* {@code marriage:{uuid}}) that are structurally non-UUID by construction. Any write endpoint
|
||||
* must reject ids that do not parse as {@code UUID} — enforced and tested in issue #5.
|
||||
*
|
||||
* <p>Callers of {@code TimelineService.assembleDerivedEvents()} must independently enforce
|
||||
* {@code READ_ALL} authorization before invoking that method (see ADR-043).
|
||||
*/
|
||||
public record TimelineEntryDTO(
|
||||
@Schema(requiredMode = Schema.RequiredMode.REQUIRED) String id,
|
||||
@Schema(requiredMode = Schema.RequiredMode.REQUIRED) EventType type,
|
||||
LocalDate eventDate,
|
||||
@Schema(requiredMode = Schema.RequiredMode.REQUIRED) DatePrecision precision,
|
||||
@Schema(requiredMode = Schema.RequiredMode.REQUIRED) boolean derived,
|
||||
DerivedEventType derivedType,
|
||||
String primaryPersonName,
|
||||
String relatedPersonName
|
||||
) {
|
||||
}
|
||||
Reference in New Issue
Block a user