dev: workspace issue count (#1298)

This commit is contained in:
pablohashescobar 2023-06-16 18:58:56 +05:30 committed by GitHub
parent 78f9028b2f
commit bfe581d3bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 2 deletions

View File

@ -19,6 +19,7 @@ from plane.db.models import (
class WorkSpaceSerializer(BaseSerializer): class WorkSpaceSerializer(BaseSerializer):
owner = UserLiteSerializer(read_only=True) owner = UserLiteSerializer(read_only=True)
total_members = serializers.IntegerField(read_only=True) total_members = serializers.IntegerField(read_only=True)
total_issues = serializers.IntegerField(read_only=True)
class Meta: class Meta:
model = Workspace model = Workspace

View File

@ -80,9 +80,22 @@ class WorkSpaceViewSet(BaseViewSet):
lookup_field = "slug" lookup_field = "slug"
def get_queryset(self): def get_queryset(self):
member_count = (
WorkspaceMember.objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
issue_count = (
Issue.objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
return self.filter_queryset( return self.filter_queryset(
super().get_queryset().select_related("owner") super().get_queryset().select_related("owner")
).order_by("name") ).order_by("name").filter(workspace_member__member=self.request.user).annotate(total_members=member_count).annotate(total_issues=issue_count)
def create(self, request): def create(self, request):
try: try:
@ -139,6 +152,13 @@ class UserWorkSpacesEndpoint(BaseAPIView):
.values("count") .values("count")
) )
issue_count = (
Issue.objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
workspace = ( workspace = (
Workspace.objects.prefetch_related( Workspace.objects.prefetch_related(
Prefetch("workspace_member", queryset=WorkspaceMember.objects.all()) Prefetch("workspace_member", queryset=WorkspaceMember.objects.all())
@ -147,7 +167,7 @@ class UserWorkSpacesEndpoint(BaseAPIView):
workspace_member__member=request.user, workspace_member__member=request.user,
) )
.select_related("owner") .select_related("owner")
).annotate(total_members=member_count) ).annotate(total_members=member_count).annotate(total_issues=issue_count)
serializer = WorkSpaceSerializer(self.filter_queryset(workspace), many=True) serializer = WorkSpaceSerializer(self.filter_queryset(workspace), many=True)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)