diff --git a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipInferenceService.java b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipInferenceService.java index 7b43235e..c93e0208 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipInferenceService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipInferenceService.java @@ -96,7 +96,8 @@ public class RelationshipInferenceService { if (p == null) continue; List path = shortestPaths.get(id); PersonNodeDTO node = new PersonNodeDTO( - p.getId(), p.getDisplayName(), p.getBirthYear(), p.getDeathYear(), p.isFamilyMember()); + p.getId(), p.getDisplayName(), p.getBirthYear(), p.getDeathYear(), + p.getGeneration(), p.isFamilyMember()); out.add(new InferredRelationshipWithPersonDTO(node, labelFor(path), path.size())); } out.sort(Comparator.comparingInt(InferredRelationshipWithPersonDTO::hops) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipService.java b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipService.java index d813b8e8..9c8096ab 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/RelationshipService.java @@ -66,7 +66,8 @@ public class RelationshipService { for (Person p : familyMembers) { familyIds.add(p.getId()); nodes.add(new PersonNodeDTO( - p.getId(), p.getDisplayName(), p.getBirthYear(), p.getDeathYear(), true)); + p.getId(), p.getDisplayName(), p.getBirthYear(), p.getDeathYear(), + p.getGeneration(), true)); } List familyEdges = relationshipRepository.findAllByRelationTypeIn( diff --git a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/dto/PersonNodeDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/dto/PersonNodeDTO.java index 2f745700..448cc2d7 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/dto/PersonNodeDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/person/relationship/dto/PersonNodeDTO.java @@ -10,5 +10,6 @@ public record PersonNodeDTO( @Schema(requiredMode = Schema.RequiredMode.REQUIRED) String displayName, Integer birthYear, Integer deathYear, + Integer generation, @Schema(requiredMode = Schema.RequiredMode.REQUIRED) boolean familyMember ) {} diff --git a/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipControllerTest.java b/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipControllerTest.java index 74cc739c..91f35eea 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipControllerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipControllerTest.java @@ -93,7 +93,7 @@ class RelationshipControllerTest { @Test @WithMockUser(username = "testuser", authorities = {"READ_ALL"}) void getNetwork_returns200_with_NetworkDTO_for_authenticated_user() throws Exception { - PersonNodeDTO node = new PersonNodeDTO(PERSON_ID, "Alice Müller", 1900, 1980, true); + PersonNodeDTO node = new PersonNodeDTO(PERSON_ID, "Alice Müller", 1900, 1980, null, true); RelationshipDTO edge = new RelationshipDTO( UUID.randomUUID(), PERSON_ID, OTHER_ID, "Alice Müller", 1900, 1980, @@ -111,7 +111,7 @@ class RelationshipControllerTest { @Test @WithMockUser(username = "testuser", authorities = {"READ_ALL"}) void getInferredRelationships_returns200_with_list_for_authenticated_user() throws Exception { - PersonNodeDTO relative = new PersonNodeDTO(OTHER_ID, "Bob Müller", 1930, null, true); + PersonNodeDTO relative = new PersonNodeDTO(OTHER_ID, "Bob Müller", 1930, null, null, true); InferredRelationshipWithPersonDTO inferred = new InferredRelationshipWithPersonDTO(relative, "Großvater", 2); when(relationshipService.getInferredRelationships(PERSON_ID)) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipServiceTest.java index c8d1faf6..d8d41a9d 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/person/relationship/RelationshipServiceTest.java @@ -237,6 +237,22 @@ class RelationshipServiceTest { assertThat(result.edges().get(0).relatedPersonId()).isEqualTo(bob.getId()); } + @Test + void getFamilyNetwork_populates_generation_on_PersonNodeDTO() { + Person walter = Person.builder().id(UUID.randomUUID()).lastName("Raddatz") + .familyMember(true).generation(2).build(); + Person clara = Person.builder().id(UUID.randomUUID()).lastName("Raddatz") + .familyMember(true).generation(3).build(); + when(personService.findAllFamilyMembers()).thenReturn(List.of(walter, clara)); + when(relationshipRepository.findAllByRelationTypeIn(any())).thenReturn(List.of()); + + NetworkDTO result = service.getFamilyNetwork(); + + assertThat(result.nodes()).hasSize(2); + assertThat(result.nodes().stream().map(n -> n.generation()).toList()) + .containsExactlyInAnyOrder(2, 3); + } + // --- helpers --- private static Person person(String name) {