From bfcabbfa35fba06ab44f80d25df19b67c2f6c359 Mon Sep 17 00:00:00 2001
From: Valentin Rigal <rigal@teklia.com>
Date: Wed, 3 Apr 2024 12:22:57 +0200
Subject: [PATCH] Update CreateDatasetElementsSelection endpoint

---
 arkindex/training/serializers.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arkindex/training/serializers.py b/arkindex/training/serializers.py
index 33365ecfd8..9686bbb124 100644
--- a/arkindex/training/serializers.py
+++ b/arkindex/training/serializers.py
@@ -791,6 +791,20 @@ class SelectionDatasetElementSerializer(serializers.Serializer):
             raise ValidationError(f"Dataset {set.dataset.id} is not part of corpus {corpus.name}.")
         if set.dataset.state == DatasetState.Complete:
             raise ValidationError(f"Dataset {set.dataset.id} is marked as completed.")
+        # Ensure adding elements to the dataset does not break uniqueness constraint
+        selection = self.context["request"].user.selected_elements.filter(corpus=corpus)
+        if set.dataset.unique_elements and (
+            existing_set := (
+                set.dataset.sets
+                .exclude(id=set.id)
+                .filter(set_elements__element_id__in=selection.values_list("id", flat=True))
+                .values_list("name", flat=True)
+                .first()
+            )
+        ):
+            raise ValidationError([
+                f"The dataset prevent duplication and this element is already present in set {existing_set}."
+            ])
         return set
 
     def create(self, validated_data):
-- 
GitLab