From 800c725eff589dd4fd1fbd84e192746dd792055d Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Thu, 6 Feb 2025 14:01:27 +0530 Subject: [PATCH 1/2] fix: creating and updating duplicate quick links --- apiserver/plane/app/serializers/workspace.py | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 68e12608517..03db67d52fe 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -146,6 +146,28 @@ def validate_url(self, value): return value + def create(self, validated_data): + if WorkspaceUserLink.objects.filter( + url=validated_data.get("url"), workspace_id=validated_data.get("workspace_id"), owner=validated_data.get("owner") + ).exists(): + raise serializers.ValidationError( + {"error": "URL already exists for this Issue"} + ) + return WorkspaceUserLink.objects.create(**validated_data) + + def update(self, instance, validated_data): + if ( + WorkspaceUserLink.objects.filter( + url=validated_data.get("url"), workspace_id=instance.workspace_id, owner=instance.owner + ) + .exclude(pk=instance.id) + .exists() + ): + raise serializers.ValidationError( + {"error": "URL already exists for this Issue"} + ) + + return super().update(instance, validated_data) class IssueRecentVisitSerializer(serializers.ModelSerializer): project_identifier = serializers.SerializerMethodField() From e6365a01a0efa6060922b6b5b80c949d66344d0f Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Thu, 6 Feb 2025 15:09:03 +0530 Subject: [PATCH 2/2] fix: improve code readibiltiy --- apiserver/plane/app/serializers/workspace.py | 35 ++++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 03db67d52fe..c70d5e2a1bf 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -146,25 +146,38 @@ def validate_url(self, value): return value + def create(self, validated_data): - if WorkspaceUserLink.objects.filter( - url=validated_data.get("url"), workspace_id=validated_data.get("workspace_id"), owner=validated_data.get("owner") - ).exists(): + # Filtering the WorkspaceUserLink with the given url to check if the link already exists. + + url = validated_data.get("url") + + workspace_user_link = WorkspaceUserLink.objects.filter( + url=url, + workspace_id=validated_data.get("workspace_id"), + owner=validated_data.get("owner") + ) + + if workspace_user_link.exists(): raise serializers.ValidationError( - {"error": "URL already exists for this Issue"} + {"error": "URL already exists for this workspace and owner"} ) return WorkspaceUserLink.objects.create(**validated_data) def update(self, instance, validated_data): - if ( - WorkspaceUserLink.objects.filter( - url=validated_data.get("url"), workspace_id=instance.workspace_id, owner=instance.owner + # Filtering the WorkspaceUserLink with the given url to check if the link already exists. + + url = validated_data.get("url") + + workspace_user_link = WorkspaceUserLink.objects.filter( + url=url, + workspace_id=instance.workspace_id, + owner=instance.owner ) - .exclude(pk=instance.id) - .exists() - ): + + if workspace_user_link.exclude(pk=instance.id).exists(): raise serializers.ValidationError( - {"error": "URL already exists for this Issue"} + {"error": "URL already exists for this workspace and owner"} ) return super().update(instance, validated_data)