From 3d80bc656cd7caff1363bb1a724a20a472e60574 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 8 Jun 2026 20:05:28 +0200 Subject: [PATCH] refactor(journeyitem): use saveAll in reorder for efficiency Replace the per-item save() loop in reorder() with a single saveAll() call, reducing database round-trips for large journeys. Co-Authored-By: Claude Sonnet 4.6 --- .../geschichte/journeyitem/JourneyItemService.java | 5 +++-- .../geschichte/journeyitem/JourneyItemServiceTest.java | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java index d6fc0daf..4e0a78d8 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java @@ -167,12 +167,13 @@ public class JourneyItemService { itemMap.put(item.getId(), item); } - List reordered = new ArrayList<>(requestedIds.size()); + List toSave = new ArrayList<>(requestedIds.size()); for (int i = 0; i < requestedIds.size(); i++) { JourneyItem item = itemMap.get(requestedIds.get(i)); item.setPosition((i + 1) * POSITION_STEP); - reordered.add(journeyItemRepository.save(item)); + toSave.add(item); } + List reordered = journeyItemRepository.saveAll(toSave); UUID actorId = currentUser().getId(); auditService.logAfterCommit(AuditKind.JOURNEY_ITEMS_REORDERED, actorId, null, diff --git a/backend/src/test/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemServiceTest.java index 8576141e..15ebcd87 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemServiceTest.java @@ -551,7 +551,7 @@ class JourneyItemServiceTest { JourneyItem item2 = savedItem(id2, journey, 10, null, "B"); when(journeyItemRepository.findIdsByGeschichteId(geschichteId)).thenReturn(Set.of(id1, id2)); when(journeyItemRepository.findByGeschichteIdOrderByPosition(geschichteId)).thenReturn(List.of(item2, item1)); - when(journeyItemRepository.save(any())).thenAnswer(inv -> inv.getArgument(0)); + when(journeyItemRepository.saveAll(any())).thenAnswer(inv -> inv.getArgument(0)); JourneyReorderDTO dto = new JourneyReorderDTO(); dto.setItemIds(List.of(id1, id2)); // want id1 first @@ -572,7 +572,7 @@ class JourneyItemServiceTest { JourneyItem item1 = savedItem(id1, journey, 10, null, "A"); when(journeyItemRepository.findIdsByGeschichteId(geschichteId)).thenReturn(Set.of(id1)); when(journeyItemRepository.findByGeschichteIdOrderByPosition(geschichteId)).thenReturn(List.of(item1)); - when(journeyItemRepository.save(any())).thenAnswer(inv -> inv.getArgument(0)); + when(journeyItemRepository.saveAll(any())).thenAnswer(inv -> inv.getArgument(0)); JourneyReorderDTO dto = new JourneyReorderDTO(); dto.setItemIds(List.of(id1)); @@ -596,7 +596,7 @@ class JourneyItemServiceTest { } when(journeyItemRepository.findIdsByGeschichteId(geschichteId)).thenReturn(new HashSet<>(ids)); when(journeyItemRepository.findByGeschichteIdOrderByPosition(geschichteId)).thenReturn(items); - when(journeyItemRepository.save(any())).thenAnswer(inv -> inv.getArgument(0)); + when(journeyItemRepository.saveAll(any())).thenAnswer(inv -> inv.getArgument(0)); JourneyReorderDTO dto = new JourneyReorderDTO(); dto.setItemIds(ids); @@ -613,7 +613,7 @@ class JourneyItemServiceTest { JourneyItem item1 = savedItem(id1, journey, 10, null, "A"); when(journeyItemRepository.findIdsByGeschichteId(geschichteId)).thenReturn(Set.of(id1)); when(journeyItemRepository.findByGeschichteIdOrderByPosition(geschichteId)).thenReturn(List.of(item1)); - when(journeyItemRepository.save(any())).thenAnswer(inv -> inv.getArgument(0)); + when(journeyItemRepository.saveAll(any())).thenAnswer(inv -> inv.getArgument(0)); JourneyReorderDTO dto = new JourneyReorderDTO(); dto.setItemIds(List.of(id1));