fix: state ordering for projects (#2073)

This commit is contained in:
Nikhil 2023-09-04 14:38:39 +05:30 committed by GitHub
parent dc26e1ea50
commit 58e23304a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,7 @@ from django.db.models import (
When, When,
Exists, Exists,
Max, Max,
IntegerField,
) )
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
@ -337,7 +338,11 @@ class UserWorkSpaceIssues(BaseAPIView):
issue_queryset = ( issue_queryset = (
Issue.issue_objects.filter( Issue.issue_objects.filter(
(Q(assignees__in=[request.user]) | Q(created_by=request.user) | Q(issue_subscribers__subscriber=request.user)), (
Q(assignees__in=[request.user])
| Q(created_by=request.user)
| Q(issue_subscribers__subscriber=request.user)
),
workspace__slug=slug, workspace__slug=slug,
) )
.annotate( .annotate(
@ -1994,7 +1999,9 @@ class IssueVotePublicViewSet(BaseViewSet):
serializer = IssueVoteSerializer(issue_vote) serializer = IssueVoteSerializer(issue_vote)
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
except IntegrityError: except IntegrityError:
return Response({"error": "Reaction already exists"}, status=status.HTTP_400_BAD_REQUEST) return Response(
{"error": "Reaction already exists"}, status=status.HTTP_400_BAD_REQUEST
)
except Exception as e: except Exception as e:
capture_exception(e) capture_exception(e)
return Response( return Response(
@ -2172,9 +2179,32 @@ class ProjectIssuesPublicEndpoint(BaseAPIView):
issues = IssuePublicSerializer(issue_queryset, many=True).data issues = IssuePublicSerializer(issue_queryset, many=True).data
states = State.objects.filter( state_group_order = [
workspace__slug=slug, project_id=project_id "backlog",
).values("name", "group", "color", "id") "unstarted",
"started",
"completed",
"cancelled",
]
states = (
State.objects.filter(
workspace__slug=slug,
project_id=project_id,
)
.annotate(
custom_order=Case(
*[
When(group=value, then=Value(index))
for index, value in enumerate(state_group_order)
],
default=Value(len(state_group_order)),
output_field=IntegerField(),
),
)
.values("name", "group", "color", "id")
.order_by("custom_order", "sequence")
)
labels = Label.objects.filter( labels = Label.objects.filter(
workspace__slug=slug, project_id=project_id workspace__slug=slug, project_id=project_id