From 62b96f718f6906da7f38ac58d359aa974eb4d616 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 13 Jun 2026 00:46:45 +0200 Subject: [PATCH] fix(timeline): mark always-populated audit fields REQUIRED in OpenAPI schema createdBy/updatedBy are NOT NULL and createdAt/updatedAt/version are Hibernate- populated on every persisted row, so per the CLAUDE.md rule they must carry @Schema(requiredMode = REQUIRED) like id/title/type/eventDate/precision already do. Keeps the generated TypeScript types honest if the entity ever reaches the OpenAPI spec (responses in #775 are planned as views, per ADR-040). Extends the #774 task list (which named only the five domain fields) per PR #816 review. Co-Authored-By: Claude Opus 4.8 --- .../org/raddatz/familienarchiv/timeline/TimelineEvent.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/timeline/TimelineEvent.java b/backend/src/main/java/org/raddatz/familienarchiv/timeline/TimelineEvent.java index 86155500..e9978022 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/timeline/TimelineEvent.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/timeline/TimelineEvent.java @@ -99,9 +99,11 @@ public class TimelineEvent { * CWE-639 — see ADR-040). */ @Column(name = "created_by", nullable = false) + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private UUID createdBy; @CreationTimestamp + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createdAt; /** @@ -112,9 +114,11 @@ public class TimelineEvent { * stale. Same forgery rationale as {@link #createdBy}. */ @Column(name = "updated_by", nullable = false) + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private UUID updatedBy; @UpdateTimestamp + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime updatedAt; /** @@ -125,5 +129,6 @@ public class TimelineEvent { * internals (CWE-209). */ @Version + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Long version; }