From 991bbc549ebe4fb087aa506f6e3aabed548f65b2 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Sun, 21 Jul 2024 13:16:36 +0530 Subject: [PATCH] chore: advance views queryset change --- apiserver/plane/space/urls/inbox.py | 12 ---------- apiserver/plane/space/urls/issue.py | 12 ++++++++++ apiserver/plane/space/views/issue.py | 35 ++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/apiserver/plane/space/urls/inbox.py b/apiserver/plane/space/urls/inbox.py index 20ebb343768..4113235c2e7 100644 --- a/apiserver/plane/space/urls/inbox.py +++ b/apiserver/plane/space/urls/inbox.py @@ -3,7 +3,6 @@ from plane.space.views import ( InboxIssuePublicViewSet, - IssueVotePublicViewSet, WorkspaceProjectDeployBoardEndpoint, ) @@ -30,17 +29,6 @@ ), name="inbox-issue", ), - path( - "anchor//issues//votes/", - IssueVotePublicViewSet.as_view( - { - "get": "list", - "post": "create", - "delete": "destroy", - } - ), - name="issue-vote-project-board", - ), path( "workspaces//project-boards/", WorkspaceProjectDeployBoardEndpoint.as_view(), diff --git a/apiserver/plane/space/urls/issue.py b/apiserver/plane/space/urls/issue.py index 61c19ba0168..8b7dce0e665 100644 --- a/apiserver/plane/space/urls/issue.py +++ b/apiserver/plane/space/urls/issue.py @@ -6,6 +6,7 @@ IssueCommentPublicViewSet, IssueReactionPublicViewSet, CommentReactionPublicViewSet, + IssueVotePublicViewSet, ) urlpatterns = [ @@ -73,4 +74,15 @@ ), name="comment-reactions-project-board", ), + path( + "anchor//issues//votes/", + IssueVotePublicViewSet.as_view( + { + "get": "list", + "post": "create", + "delete": "destroy", + } + ), + name="issue-vote-project-board", + ), ] diff --git a/apiserver/plane/space/views/issue.py b/apiserver/plane/space/views/issue.py index efda1c0b908..4393a3a041b 100644 --- a/apiserver/plane/space/views/issue.py +++ b/apiserver/plane/space/views/issue.py @@ -1,9 +1,12 @@ # Python imports import json + +# Django imports from django.contrib.postgres.aggregates import ArrayAgg from django.contrib.postgres.fields import ArrayField from django.db.models.functions import Coalesce, JSONObject from django.core.serializers.json import DjangoJSONEncoder +from django.utils import timezone from django.db.models import ( Exists, F, @@ -14,15 +17,15 @@ When, JSONField, Value, + OuterRef, + Func ) -# Django imports -from django.utils import timezone +# Third Party imports +from rest_framework.response import Response from rest_framework import status from rest_framework.permissions import AllowAny, IsAuthenticated -# Third Party imports -from rest_framework.response import Response # Module imports from .base import BaseAPIView, BaseViewSet @@ -43,7 +46,6 @@ from plane.app.serializers import ( CommentReactionSerializer, IssueCommentSerializer, - IssuePublicSerializer, IssueReactionSerializer, IssueVoteSerializer, ) @@ -57,6 +59,7 @@ DeployBoard, IssueVote, ProjectPublicMember, + IssueAttachment, ) from plane.bgtasks.issue_activites_task import issue_activity from plane.utils.issue_filters import issue_filters @@ -102,6 +105,28 @@ def get(self, request, anchor): ) ) .annotate(cycle_id=F("issue_cycle__cycle_id")) + .annotate( + link_count=IssueLink.objects.filter(issue=OuterRef("id")) + .order_by() + .annotate(count=Func(F("id"), function="Count")) + .values("count") + ) + .annotate( + attachment_count=IssueAttachment.objects.filter( + issue=OuterRef("id") + ) + .order_by() + .annotate(count=Func(F("id"), function="Count")) + .values("count") + ) + .annotate( + sub_issues_count=Issue.issue_objects.filter( + parent=OuterRef("id") + ) + .order_by() + .annotate(count=Func(F("id"), function="Count")) + .values("count") + ) ).distinct() issue_queryset = issue_queryset.filter(**filters)