diff --git a/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java b/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java index 3bd6f418..b359fd7b 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java @@ -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 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(); + } } \ No newline at end of file diff --git a/backend/src/test/java/org/raddatz/familienarchiv/model/PersonTest.java b/backend/src/test/java/org/raddatz/familienarchiv/model/PersonTest.java new file mode 100644 index 00000000..72674925 --- /dev/null +++ b/backend/src/test/java/org/raddatz/familienarchiv/model/PersonTest.java @@ -0,0 +1,53 @@ +package org.raddatz.familienarchiv.model; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class PersonTest { + + @Test + void getDisplayName_withAllFields() { + Person person = Person.builder() + .title("Dr.") + .firstName("Walter") + .lastName("de Gruyter") + .build(); + assertThat(person.getDisplayName()).isEqualTo("Dr. Walter de Gruyter"); + } + + @Test + void getDisplayName_withoutTitle() { + Person person = Person.builder() + .firstName("Clara") + .lastName("Cram") + .build(); + assertThat(person.getDisplayName()).isEqualTo("Clara Cram"); + } + + @Test + void getDisplayName_withNullFirstName() { + Person person = Person.builder() + .lastName("Gesellschafter des Verlages") + .build(); + assertThat(person.getDisplayName()).isEqualTo("Gesellschafter des Verlages"); + } + + @Test + void getDisplayName_withTitleAndNullFirstName() { + Person person = Person.builder() + .title("Tante") + .lastName("Molly") + .build(); + assertThat(person.getDisplayName()).isEqualTo("Tante Molly"); + } + + @Test + void personType_defaultsToPerson() { + Person person = Person.builder() + .firstName("Clara") + .lastName("Cram") + .build(); + assertThat(person.getPersonType()).isEqualTo(PersonType.PERSON); + } +}