refactor: add annotations in queryset to return sub_issues_count and total members in workspace (#185)

* refactor: add anotations in queryset to return sub_issues_count

* refactor: add sub issue count in modules cycles and my issues endpoint
This commit is contained in:
pablohashescobar 2023-01-26 11:41:11 +05:30 committed by GitHub
parent 6e99c007a5
commit 3036014ea2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 49 additions and 6 deletions

View file

@ -10,7 +10,7 @@ from django.utils import timezone
from django.core.exceptions import ValidationError
from django.core.validators import validate_email
from django.contrib.sites.shortcuts import get_current_site
from django.db.models import CharField, Count
from django.db.models import CharField, Count, OuterRef, Func, F
from django.db.models.functions import Cast
# Third party modules
@ -111,6 +111,14 @@ class UserWorkSpacesEndpoint(BaseAPIView):
def get(self, request):
try:
member_count = (
WorkspaceMember.objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
workspace = (
Workspace.objects.prefetch_related(
Prefetch("workspace_member", queryset=WorkspaceMember.objects.all())
@ -119,7 +127,7 @@ class UserWorkSpacesEndpoint(BaseAPIView):
workspace_member__member=request.user,
)
.select_related("owner")
).annotate(total_members=Count("workspace_member"))
).annotate(total_members=member_count)
serializer = WorkSpaceSerializer(self.filter_queryset(workspace), many=True)
return Response(serializer.data, status=status.HTTP_200_OK)