From a6c8db226d09a609d42b1a39de6efdbbf05ee4f3 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 28 Apr 2026 20:04:41 +0200 Subject: [PATCH] feat(transcription): PersonMention @Embeddable for sidecar entries Value object held in TranscriptionBlock.mentionedPersons via @ElementCollection. Carries the personId UUID (so renamed persons can be located) and the displayName text (so block.text rewrites match exactly via "@" + name). Both fields are non-null; displayName capped at 200 chars to match the V56 column and bound the rename propagation cost. Refs #362 Co-Authored-By: Claude Opus 4.7 --- .../familienarchiv/model/PersonMention.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 backend/src/main/java/org/raddatz/familienarchiv/model/PersonMention.java diff --git a/backend/src/main/java/org/raddatz/familienarchiv/model/PersonMention.java b/backend/src/main/java/org/raddatz/familienarchiv/model/PersonMention.java new file mode 100644 index 00000000..79b232d6 --- /dev/null +++ b/backend/src/main/java/org/raddatz/familienarchiv/model/PersonMention.java @@ -0,0 +1,30 @@ +package org.raddatz.familienarchiv.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +@Embeddable +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PersonMention { + + @NotNull + @Column(name = "person_id", nullable = false) + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) + private UUID personId; + + @NotNull + @Size(max = 200) + @Column(name = "display_name", nullable = false, length = 200) + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) + private String displayName; +}