From dc75cc41ce6070cb026c1e5198ed833224ce13d1 Mon Sep 17 00:00:00 2001 From: Stefan Hardegger Date: Tue, 21 Jul 2026 10:08:54 +0200 Subject: [PATCH] fix collection creation --- .../java/com/storycove/service/CollectionService.java | 11 +++++++---- .../src/components/collections/CollectionForm.tsx | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/storycove/service/CollectionService.java b/backend/src/main/java/com/storycove/service/CollectionService.java index 024dbc9..7c2f1a6 100644 --- a/backend/src/main/java/com/storycove/service/CollectionService.java +++ b/backend/src/main/java/com/storycove/service/CollectionService.java @@ -190,10 +190,13 @@ public class CollectionService { */ public Map addStoriesToCollection(UUID collectionId, List storyIds, Integer startPosition) { Collection collection = findByIdBasic(collectionId); - + + // Deduplicate story IDs before validation (UI may send duplicates due to event handling) + List uniqueStoryIds = storyIds.stream().distinct().collect(java.util.stream.Collectors.toList()); + // Validate stories exist - List stories = storyRepository.findAllById(storyIds); - if (stories.size() != storyIds.size()) { + List stories = storyRepository.findAllById(uniqueStoryIds); + if (stories.size() != uniqueStoryIds.size()) { throw new ResourceNotFoundException("One or more stories not found"); } @@ -203,7 +206,7 @@ public class CollectionService { // Get starting position int position = startPosition != null ? startPosition : collectionStoryRepository.getNextPosition(collectionId); - for (UUID storyId : storyIds) { + for (UUID storyId : uniqueStoryIds) { // Check if story is already in collection if (collectionStoryRepository.existsByCollectionIdAndStoryId(collectionId, storyId)) { skipped++; diff --git a/frontend/src/components/collections/CollectionForm.tsx b/frontend/src/components/collections/CollectionForm.tsx index f8ff65d..9b9cfaf 100644 --- a/frontend/src/components/collections/CollectionForm.tsx +++ b/frontend/src/components/collections/CollectionForm.tsx @@ -359,6 +359,7 @@ export default function CollectionForm({ type="checkbox" checked={isSelected} onChange={() => toggleStorySelection(story)} + onClick={(e) => e.stopPropagation()} className="rounded border-gray-300 text-blue-600 focus:ring-blue-500" />