fix: workspace roles for settings and members button (#6574)

* fix: workspace roles for settings and members button

* fix: user role and member count for new workspace

* chore: set role to 20 while workspace creation

---------

Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com>
This commit is contained in:
Akshita Goyal 2025-02-10 15:03:50 +05:30 committed by GitHub
parent 5096a15051
commit a2328d0cbe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 11 additions and 23 deletions

View file

@ -33,7 +33,6 @@ from django.core.exceptions import ValidationError
class WorkSpaceSerializer(DynamicBaseSerializer):
total_members = serializers.IntegerField(read_only=True)
total_issues = serializers.IntegerField(read_only=True)
logo_url = serializers.CharField(read_only=True)
role = serializers.IntegerField(read_only=True)

View file

@ -64,12 +64,6 @@ class WorkSpaceViewSet(BaseViewSet):
.values("count")
)
issue_count = (
Issue.issue_objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
return (
self.filter_queryset(super().get_queryset().select_related("owner"))
.order_by("name")
@ -78,8 +72,6 @@ class WorkSpaceViewSet(BaseViewSet):
workspace_member__is_active=True,
)
.annotate(total_members=member_count)
.annotate(total_issues=issue_count)
.select_related("owner")
)
def create(self, request):
@ -125,7 +117,14 @@ class WorkSpaceViewSet(BaseViewSet):
role=20,
company_role=request.data.get("company_role", ""),
)
return Response(serializer.data, status=status.HTTP_201_CREATED)
# Get total members and role
total_members=WorkspaceMember.objects.filter(workspace_id=serializer.data["id"]).count()
data = serializer.data
data["total_members"] = total_members
data["role"] = 20
return Response(data, status=status.HTTP_201_CREATED)
return Response(
[serializer.errors[error][0] for error in serializer.errors],
status=status.HTTP_400_BAD_REQUEST,
@ -168,13 +167,6 @@ class UserWorkSpacesEndpoint(BaseAPIView):
.values("count")
)
issue_count = (
Issue.issue_objects.filter(workspace=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
role = (
WorkspaceMember.objects.filter(workspace=OuterRef("id"), member=request.user, is_active=True)
.values("role")
@ -189,9 +181,7 @@ class UserWorkSpacesEndpoint(BaseAPIView):
),
)
)
.select_related("owner")
.annotate(total_members=member_count)
.annotate(total_issues=issue_count, role=role)
.annotate(role=role, total_members=member_count)
.filter(
workspace_member__member=request.user, workspace_member__is_active=True
)

View file

@ -21,7 +21,6 @@ export interface IWorkspace {
readonly created_by: string;
readonly updated_by: string;
organization_size: string;
total_issues: number;
total_projects?: number;
current_plan?: string;
role: number;

View file

@ -67,7 +67,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
<link rel="preload" href={`${API_BASE_URL}/api/users/me/settings/ `} as="fetch" crossOrigin="use-credentials" />
<link
rel="preload"
href={`${API_BASE_URL}/api/users/me/workspaces/`}
href={`${API_BASE_URL}/api/users/me/workspaces/?v=${Date.now()}`}
as="fetch"
crossOrigin="use-credentials"
/>

View file

@ -85,7 +85,7 @@ const SidebarDropdownItem = observer((props: TProps) => {
</div>
{workspace.id === activeWorkspace?.id && (
<>
{workspace?.role > EUserPermissions.GUEST && (
{workspace?.role === EUserPermissions.ADMIN && (
<div className="mt-2 mb-1 flex gap-2">
<Link
href={`/${workspace.slug}/settings`}