mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
dev: grouped paginator
This commit is contained in:
parent
cd302d061e
commit
d90845b260
@ -243,8 +243,78 @@ class IssueViewSet(WebhookMixin, BaseViewSet):
|
|||||||
sub_group_by=sub_group_by,
|
sub_group_by=sub_group_by,
|
||||||
)
|
)
|
||||||
|
|
||||||
# List Paginate
|
if group_by:
|
||||||
if not group_by and not sub_group_by:
|
if sub_group_by:
|
||||||
|
if group_by == sub_group_by:
|
||||||
|
return Response(
|
||||||
|
{
|
||||||
|
"error": "Group by and sub group by cannot have same parameters"
|
||||||
|
},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return self.paginate(
|
||||||
|
request=request,
|
||||||
|
order_by=order_by_param,
|
||||||
|
queryset=issue_queryset,
|
||||||
|
on_results=lambda issues: issue_on_results(
|
||||||
|
group_by=group_by,
|
||||||
|
issues=issues,
|
||||||
|
sub_group_by=sub_group_by,
|
||||||
|
),
|
||||||
|
paginator_cls=SubGroupedOffsetPaginator,
|
||||||
|
group_by_fields=issue_group_values(
|
||||||
|
field=group_by,
|
||||||
|
slug=slug,
|
||||||
|
project_id=project_id,
|
||||||
|
filters=filters,
|
||||||
|
),
|
||||||
|
sub_group_by_fields=issue_group_values(
|
||||||
|
field=sub_group_by,
|
||||||
|
slug=slug,
|
||||||
|
project_id=project_id,
|
||||||
|
filters=filters,
|
||||||
|
),
|
||||||
|
group_by_field_name=group_by,
|
||||||
|
sub_group_by_field_name=sub_group_by,
|
||||||
|
count_filter=Q(
|
||||||
|
Q(issue_inbox__status=1)
|
||||||
|
| Q(issue_inbox__status=-1)
|
||||||
|
| Q(issue_inbox__status=2)
|
||||||
|
| Q(issue_inbox__isnull=True),
|
||||||
|
archived_at__isnull=True,
|
||||||
|
is_draft=False,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Group paginate
|
||||||
|
return self.paginate(
|
||||||
|
request=request,
|
||||||
|
order_by=order_by_param,
|
||||||
|
queryset=issue_queryset,
|
||||||
|
on_results=lambda issues: issue_on_results(
|
||||||
|
group_by=group_by,
|
||||||
|
issues=issues,
|
||||||
|
sub_group_by=sub_group_by,
|
||||||
|
),
|
||||||
|
paginator_cls=GroupedOffsetPaginator,
|
||||||
|
group_by_fields=issue_group_values(
|
||||||
|
field=group_by,
|
||||||
|
slug=slug,
|
||||||
|
project_id=project_id,
|
||||||
|
filters=filters,
|
||||||
|
),
|
||||||
|
group_by_field_name=group_by,
|
||||||
|
count_filter=Q(
|
||||||
|
Q(issue_inbox__status=1)
|
||||||
|
| Q(issue_inbox__status=-1)
|
||||||
|
| Q(issue_inbox__status=2)
|
||||||
|
| Q(issue_inbox__isnull=True),
|
||||||
|
archived_at__isnull=True,
|
||||||
|
is_draft=False,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
else:
|
||||||
return self.paginate(
|
return self.paginate(
|
||||||
order_by=order_by_param,
|
order_by=order_by_param,
|
||||||
request=request,
|
request=request,
|
||||||
@ -254,65 +324,6 @@ class IssueViewSet(WebhookMixin, BaseViewSet):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
if group_by and not sub_group_by:
|
|
||||||
# Group paginate
|
|
||||||
return self.paginate(
|
|
||||||
request=request,
|
|
||||||
order_by=order_by_param,
|
|
||||||
queryset=issue_queryset,
|
|
||||||
on_results=lambda issues: issue_on_results(
|
|
||||||
group_by=group_by, issues=issues, sub_group_by=sub_group_by
|
|
||||||
),
|
|
||||||
paginator_cls=GroupedOffsetPaginator,
|
|
||||||
group_by_fields=issue_group_values(
|
|
||||||
field=group_by,
|
|
||||||
slug=slug,
|
|
||||||
project_id=project_id,
|
|
||||||
filters=filters,
|
|
||||||
),
|
|
||||||
group_by_field_name=group_by,
|
|
||||||
count_filter=Q(
|
|
||||||
Q(issue_inbox__status=1)
|
|
||||||
| Q(issue_inbox__status=-1)
|
|
||||||
| Q(issue_inbox__status=2)
|
|
||||||
| Q(issue_inbox__isnull=True),
|
|
||||||
archived_at__isnull=True,
|
|
||||||
is_draft=False,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
if group_by and sub_group_by:
|
|
||||||
return self.paginate(
|
|
||||||
request=request,
|
|
||||||
order_by=order_by_param,
|
|
||||||
queryset=issue_queryset,
|
|
||||||
on_results=lambda issues: issue_on_results(
|
|
||||||
group_by=group_by, issues=issues, sub_group_by=sub_group_by
|
|
||||||
),
|
|
||||||
paginator_cls=SubGroupedOffsetPaginator,
|
|
||||||
group_by_fields=issue_group_values(
|
|
||||||
field=group_by,
|
|
||||||
slug=slug,
|
|
||||||
project_id=project_id,
|
|
||||||
filters=filters,
|
|
||||||
),
|
|
||||||
sub_group_by_fields=issue_group_values(
|
|
||||||
field=sub_group_by,
|
|
||||||
slug=slug,
|
|
||||||
project_id=project_id,
|
|
||||||
filters=filters,
|
|
||||||
),
|
|
||||||
group_by_field_name=group_by,
|
|
||||||
sub_group_by_field_name=sub_group_by,
|
|
||||||
count_filter=Q(
|
|
||||||
Q(issue_inbox__status=1)
|
|
||||||
| Q(issue_inbox__status=-1)
|
|
||||||
| Q(issue_inbox__status=2)
|
|
||||||
| Q(issue_inbox__isnull=True),
|
|
||||||
archived_at__isnull=True,
|
|
||||||
is_draft=False,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
def create(self, request, slug, project_id):
|
def create(self, request, slug, project_id):
|
||||||
project = Project.objects.get(pk=project_id)
|
project = Project.objects.get(pk=project_id)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Django imports
|
# Django imports
|
||||||
from django.contrib.postgres.aggregates import ArrayAgg
|
from django.contrib.postgres.aggregates import ArrayAgg
|
||||||
from django.contrib.postgres.fields import ArrayField
|
from django.contrib.postgres.fields import ArrayField
|
||||||
from django.db.models import F, Q, UUIDField, Value
|
from django.db.models import Q, UUIDField, Value
|
||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
|
|
||||||
# Module imports
|
# Module imports
|
||||||
|
Loading…
Reference in New Issue
Block a user