diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 68e12608517..c70d5e2a1bf 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -147,6 +147,41 @@ def validate_url(self, value): return value + def create(self, validated_data): + # 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 workspace and owner"} + ) + return WorkspaceUserLink.objects.create(**validated_data) + + def update(self, instance, validated_data): + # 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 + ) + + if workspace_user_link.exclude(pk=instance.id).exists(): + raise serializers.ValidationError( + {"error": "URL already exists for this workspace and owner"} + ) + + return super().update(instance, validated_data) + class IssueRecentVisitSerializer(serializers.ModelSerializer): project_identifier = serializers.SerializerMethodField()