diff --git a/lego/apps/achievements/pagination.py b/lego/apps/achievements/pagination.py new file mode 100644 index 000000000..bebdd91b4 --- /dev/null +++ b/lego/apps/achievements/pagination.py @@ -0,0 +1,7 @@ +from lego.utils.pagination import CursorPagination + + +class AchievementLeaderboardPagination(CursorPagination): + page_size = 25 + max_page_size = 25 + ordering = "-achievements_score" diff --git a/lego/apps/achievements/views.py b/lego/apps/achievements/views.py index cd5178f94..2aea6a045 100644 --- a/lego/apps/achievements/views.py +++ b/lego/apps/achievements/views.py @@ -1,6 +1,7 @@ from rest_framework import mixins, permissions, viewsets from rest_framework.response import Response +from lego.apps.achievements.pagination import AchievementLeaderboardPagination from lego.apps.users.models import User from lego.apps.users.serializers.users import PublicUserWithGroupsSerializer @@ -8,15 +9,20 @@ class LeaderBoardViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): serializer_class = PublicUserWithGroupsSerializer permission_classes = [permissions.IsAuthenticated] + pagination_class = AchievementLeaderboardPagination def get_queryset(self): return ( User.objects.filter(achievements__isnull=False) .order_by("-achievements_score") - .distinct()[:50] + .distinct() ) def list(self, request, *args, **kwargs): queryset = self.get_queryset() + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.get_serializer(page, many=True) + return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) - return Response(serializer.data) + return Response(serializer.data) \ No newline at end of file