From d5c30f2029d6ed4e6529c1e81f1fd8104c9ccac3 Mon Sep 17 00:00:00 2001 From: abutalib-kiwi Date: Fri, 11 Aug 2023 15:54:54 +0530 Subject: [PATCH] added pagination in leaderboard admin --- web_admin/pagination.py | 13 +++++++++++++ web_admin/views/analytics.py | 11 ++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 web_admin/pagination.py diff --git a/web_admin/pagination.py b/web_admin/pagination.py new file mode 100644 index 0000000..6a6aff4 --- /dev/null +++ b/web_admin/pagination.py @@ -0,0 +1,13 @@ +""" +web_admin pagination file +""" +from rest_framework.pagination import PageNumberPagination + + +class CustomPageNumberPagination(PageNumberPagination): + """ + custom paginator class + """ + page_size = 10 # Set the desired page size + page_size_query_param = 'page_size' + max_page_size = 100 # Set a maximum page size if needed diff --git a/web_admin/views/analytics.py b/web_admin/views/analytics.py index 688e445..e8a8f5c 100644 --- a/web_admin/views/analytics.py +++ b/web_admin/views/analytics.py @@ -1,10 +1,15 @@ """ web_admin analytics view file """ +# python imports import datetime +# third party imports from rest_framework.viewsets import GenericViewSet from rest_framework.decorators import action +from rest_framework.permissions import IsAuthenticated + +# django imports from django.contrib.auth import get_user_model from django.db.models import Q from django.db.models import Count, OuterRef, Subquery, Sum @@ -12,10 +17,13 @@ from django.db.models.functions import TruncDate from django.db.models import F, Window from django.db.models.functions.window import Rank +# local imports from account.utils import custom_response from base.constants import PENDING, IN_PROGRESS, REJECTED, REQUESTED, COMPLETED, EXPIRED from guardian.models import JuniorTask from junior.models import JuniorPoints +from web_admin.pagination import CustomPageNumberPagination +from web_admin.permission import AdminPermission from web_admin.serializers.analytics_serializer import LeaderboardSerializer USER = get_user_model() @@ -26,6 +34,7 @@ class AnalyticsViewSet(GenericViewSet): analytics api view """ serializer_class = None + permission_classes = [IsAuthenticated, AdminPermission] def get_queryset(self): user_qs = USER.objects.filter( @@ -122,7 +131,7 @@ class AnalyticsViewSet(GenericViewSet): expression=Rank(), order_by=[F('total_points').desc(), 'junior__created_at'] )).order_by('-total_points', 'junior__created_at') - paginator = self.pagination_class() + paginator = CustomPageNumberPagination() paginated_queryset = paginator.paginate_queryset(queryset, request) serializer = self.serializer_class(paginated_queryset, many=True) return custom_response(None, serializer.data)