From 7810ca7dd7b9fe1b2656d12cc24fbac7c047b53d Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 13 Jun 2026 14:30:30 +0200 Subject: [PATCH] feat(relationship): add findAllSpouseEdges() for timeline assembly Returns all SPOUSE_OF edges with JOIN FETCH on both person sides, preventing N+1 in TimelineService.assembleDerivedEvents() (REQ-011). Reuses existing findAllByRelationTypeIn query which already JOIN FETCHes. Refs #776 Co-Authored-By: Claude Sonnet 4.6 --- .../person/relationship/RelationshipService.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 51b312c6..ee237617 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 @@ -86,6 +86,15 @@ public class RelationshipService { return new NetworkDTO(nodes, edges); } + /** + * Returns all {@code SPOUSE_OF} edges with both person sides JOIN FETCHed. + * Used by {@code TimelineService.assembleDerivedEvents()} to build Heirat events + * without per-edge N+1 queries. + */ + public List findAllSpouseEdges() { + return relationshipRepository.findAllByRelationTypeIn(List.of(RelationType.SPOUSE_OF)); + } + @Transactional public RelationshipDTO addRelationship(UUID personId, CreateRelationshipRequest dto) { if (personId.equals(dto.relatedPersonId())) {