feat: PersonNameParser enhancements and Person model refactor (#209-#213) #215

Merged
marcel merged 25 commits from feat/issues-209-213-person-parser-enhancements into main 2026-04-08 18:48:00 +02:00
2 changed files with 73 additions and 2 deletions
Showing only changes of commit 9f14648dc3 - Show all commits

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();
}
}

View File

@@ -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);
}
}