feat: user project sorting (#1719)
* feat: user project sorting * dev: migration typo fix and query member fix * feat: project member sort order update * fix: project sorting per members
This commit is contained in:
parent
40fd7790eb
commit
cc2e6182b6
4 changed files with 43 additions and 12 deletions
|
|
@ -5,7 +5,7 @@ from datetime import datetime
|
|||
# Django imports
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import IntegrityError
|
||||
from django.db.models import Q, Exists, OuterRef, Func, F
|
||||
from django.db.models import Q, Exists, OuterRef, Func, F, Min, Subquery
|
||||
from django.core.validators import validate_email
|
||||
from django.conf import settings
|
||||
|
||||
|
|
@ -120,9 +120,15 @@ class ProjectViewSet(BaseViewSet):
|
|||
project_id=OuterRef("pk"),
|
||||
workspace__slug=self.kwargs.get("slug"),
|
||||
)
|
||||
sort_order_query = ProjectMember.objects.filter(
|
||||
member=request.user,
|
||||
project_id=OuterRef("pk"),
|
||||
workspace__slug=self.kwargs.get("slug"),
|
||||
).values("sort_order")
|
||||
projects = (
|
||||
self.get_queryset()
|
||||
.annotate(is_favorite=Exists(subquery))
|
||||
.annotate(sort_order=Subquery(sort_order_query))
|
||||
.order_by("sort_order", "name")
|
||||
.annotate(
|
||||
total_members=ProjectMember.objects.filter(
|
||||
|
|
@ -592,17 +598,26 @@ class AddMemberToProjectEndpoint(BaseAPIView):
|
|||
{"error": "Atleast one member is required"},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
bulk_project_members = []
|
||||
|
||||
project_members = ProjectMember.objects.bulk_create(
|
||||
[
|
||||
project_members = ProjectMember.objects.filter(
|
||||
workspace=self.workspace, member_id__in=[member.get("member_id") for member in members]
|
||||
).values("member_id").annotate(sort_order_min=Min("sort_order"))
|
||||
|
||||
for member in members:
|
||||
sort_order = [project_member.get("sort_order") for project_member in project_members]
|
||||
bulk_project_members.append(
|
||||
ProjectMember(
|
||||
member_id=member.get("member_id"),
|
||||
role=member.get("role", 10),
|
||||
project_id=project_id,
|
||||
workspace_id=project.workspace_id,
|
||||
sort_order=sort_order[0] - 10000 if len(sort_order) else 65535
|
||||
)
|
||||
for member in members
|
||||
],
|
||||
)
|
||||
|
||||
project_members = ProjectMember.objects.bulk_create(
|
||||
bulk_project_members,
|
||||
batch_size=10,
|
||||
ignore_conflicts=True,
|
||||
)
|
||||
|
|
@ -845,12 +860,14 @@ class ProjectUserViewsEndpoint(BaseAPIView):
|
|||
view_props = project_member.view_props
|
||||
default_props = project_member.default_props
|
||||
preferences = project_member.preferences
|
||||
sort_order = project_member.sort_order
|
||||
|
||||
project_member.view_props = request.data.get("view_props", view_props)
|
||||
project_member.default_props = request.data.get(
|
||||
"default_props", default_props
|
||||
)
|
||||
project_member.preferences = request.data.get("preferences", preferences)
|
||||
project_member.sort_order = request.data.get("sort_order", sort_order)
|
||||
|
||||
project_member.save()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue