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/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: diff --git a/apiserver/plane/app/views/workspace/base.py b/apiserver/plane/app/views/workspace/base.py index 058f7702abd..4d81eb1607d 100644 --- a/apiserver/plane/app/views/workspace/base.py +++ b/apiserver/plane/app/views/workspace/base.py @@ -7,9 +7,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.fields import DateField from django.db.models.functions import Cast, ExtractDay, ExtractWeek + # Django imports from django.http import HttpResponse from django.utils import timezone @@ -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)