From 99f3d5810dbda8314c8feb9a8c20a72d199e4812 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 4 Feb 2025 23:46:32 +0530 Subject: [PATCH 1/3] [WEB-3309] fix: project stats endpoint (#6544) --- apiserver/plane/app/views/analytic/base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apiserver/plane/app/views/analytic/base.py b/apiserver/plane/app/views/analytic/base.py index d4e2357c3e9..631c6884a6b 100644 --- a/apiserver/plane/app/views/analytic/base.py +++ b/apiserver/plane/app/views/analytic/base.py @@ -456,7 +456,7 @@ class ProjectStatsEndpoint(BaseAPIView): @allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE") def get(self, request, slug): fields = request.GET.get("fields", "").split(",") - project_ids = request.GET.get("project_ids", "").split(",") + project_ids = request.GET.get("project_ids", "") valid_fields = { "total_issues", @@ -471,9 +471,8 @@ def get(self, request, slug): requested_fields = valid_fields projects = Project.objects.filter(workspace__slug=slug) - if project_ids: - projects = projects.filter(id__in=project_ids) + projects = projects.filter(id__in=project_ids.split(",")) annotations = {} if "total_issues" in requested_fields: From 4c4d9e053d5ed4a48c8d3686ff1245413e6968b8 Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Wed, 5 Feb 2025 13:27:30 +0530 Subject: [PATCH 2/3] feat: Return user role --- apiserver/plane/app/serializers/workspace.py | 2 +- apiserver/plane/app/views/workspace/base.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apiserver/plane/app/serializers/workspace.py b/apiserver/plane/app/serializers/workspace.py index 68e12608517..826943b8f13 100644 --- a/apiserver/plane/app/serializers/workspace.py +++ b/apiserver/plane/app/serializers/workspace.py @@ -32,10 +32,10 @@ class WorkSpaceSerializer(DynamicBaseSerializer): - owner = UserLiteSerializer(read_only=True) total_members = serializers.IntegerField(read_only=True) total_issues = serializers.IntegerField(read_only=True) logo_url = serializers.CharField(read_only=True) + role = serializers.CharField(read_only=True) def validate_slug(self, value): # Check if the slug is restricted diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index 058f7702abd..4899d603125 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -6,9 +6,11 @@ from dateutil.relativedelta import relativedelta from django.db import IntegrityError -from django.db.models import Count, F, Func, OuterRef, Prefetch, Q +from django.db.models import Count, F, Func, OuterRef, Prefetch, Q, Value, TextField + from django.db.models.fields import DateField from django.db.models.functions import Cast, ExtractDay, ExtractWeek +from django.db.models.functions import Coalesce # Django imports from django.http import HttpResponse @@ -173,6 +175,11 @@ def get(self, request): .values("count") ) + role = ( + WorkspaceMember.objects.filter(workspace=OuterRef("id"), member=request.user, is_active=True) + .values("role") + ) + workspace = ( Workspace.objects.prefetch_related( Prefetch( @@ -184,17 +191,19 @@ def get(self, request): ) .select_related("owner") .annotate(total_members=member_count) - .annotate(total_issues=issue_count) + .annotate(total_issues=issue_count, role=role) .filter( workspace_member__member=request.user, workspace_member__is_active=True ) .distinct() ) + workspaces = WorkSpaceSerializer( self.filter_queryset(workspace), fields=fields if fields else None, many=True, ).data + return Response(workspaces, status=status.HTTP_200_OK) From c4b4caf568509c30ee2421ec04b7f00484da8724 Mon Sep 17 00:00:00 2001 From: sangeethailango Date: Wed, 5 Feb 2025 13:33:19 +0530 Subject: [PATCH 3/3] chore: remove unused imports --- apiserver/plane/app/views/workspace/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index 4899d603125..4d81eb1607d 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -6,11 +6,11 @@ from dateutil.relativedelta import relativedelta from django.db import IntegrityError -from django.db.models import Count, F, Func, OuterRef, Prefetch, Q, Value, TextField +from django.db.models import Count, F, Func, OuterRef, Prefetch, Q from django.db.models.fields import DateField from django.db.models.functions import Cast, ExtractDay, ExtractWeek -from django.db.models.functions import Coalesce + # Django imports from django.http import HttpResponse