feat(model): add title, personType, displayName to Person entity

- Add title (nullable VARCHAR) and personType (enum, default PERSON)
- Make firstName nullable for non-person entities
- Add @Transient getDisplayName() as single source of truth for
  name display, exposed via @Schema(READ_ONLY, REQUIRED)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-08 11:53:07 +02:00
parent 8101ddb697
commit 9f14648dc3
2 changed files with 73 additions and 2 deletions

View File

@@ -21,14 +21,22 @@ public class Person {
@Schema(requiredMode = Schema.RequiredMode.REQUIRED)
private UUID id;
@Column(nullable = false)
@Schema(requiredMode = Schema.RequiredMode.REQUIRED)
@Column(name = "title")
private String title;
@Column(nullable = true)
private String firstName;
@Column(nullable = false)
@Schema(requiredMode = Schema.RequiredMode.REQUIRED)
private String lastName;
@Enumerated(EnumType.STRING)
@Column(name = "person_type", nullable = false)
@Builder.Default
@Schema(requiredMode = Schema.RequiredMode.REQUIRED)
private PersonType personType = PersonType.PERSON;
// Optional: Aliasse für die Suche (z.B. "Opa Hans")
private String alias;
@@ -46,4 +54,14 @@ public class Person {
@JsonIgnore
@Builder.Default
private List<PersonNameAlias> nameAliases = new ArrayList<>();
@Transient
@Schema(accessMode = Schema.AccessMode.READ_ONLY, requiredMode = Schema.RequiredMode.REQUIRED)
public String getDisplayName() {
StringBuilder sb = new StringBuilder();
if (title != null) sb.append(title).append(" ");
if (firstName != null) sb.append(firstName).append(" ");
sb.append(lastName);
return sb.toString().trim();
}
}