From c07f8d9d9de99241aab063dccbd6f9c8e0981be8 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Thu, 2 Jan 2025 13:23:52 +0530 Subject: [PATCH] chore: handled the unique state name validation --- apiserver/plane/app/views/state/base.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/apiserver/plane/app/views/state/base.py b/apiserver/plane/app/views/state/base.py index 00f4813e681..4c7a73c369e 100644 --- a/apiserver/plane/app/views/state/base.py +++ b/apiserver/plane/app/views/state/base.py @@ -1,6 +1,9 @@ # Python imports from itertools import groupby +# Django imports +from django.db.utils import IntegrityError + # Third party imports from rest_framework.response import Response from rest_framework import status @@ -37,11 +40,19 @@ def get_queryset(self): @invalidate_cache(path="workspaces/:slug/states/", url_params=True, user=False) @allow_permission([ROLE.ADMIN]) def create(self, request, slug, project_id): - serializer = StateSerializer(data=request.data) - if serializer.is_valid(): - serializer.save(project_id=project_id) - return Response(serializer.data, status=status.HTTP_200_OK) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + try: + serializer = StateSerializer(data=request.data) + if serializer.is_valid(): + serializer.save(project_id=project_id) + return Response(serializer.data, status=status.HTTP_200_OK) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + except IntegrityError as e: + if "already exists" in str(e): + return Response( + {"name": "The state name is already taken"}, + status=status.HTTP_400_BAD_REQUEST, + ) + @allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) def list(self, request, slug, project_id):