Skip to content

Commit

Permalink
Implement pagination achievements
Browse files Browse the repository at this point in the history
  • Loading branch information
jonasdeluna committed Jan 27, 2025
1 parent dbd2c07 commit a9e1cde
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
7 changes: 7 additions & 0 deletions lego/apps/achievements/pagination.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from lego.utils.pagination import CursorPagination


class AchievementLeaderboardPagination(CursorPagination):
page_size = 25
max_page_size = 25
ordering = "-achievements_score"
10 changes: 8 additions & 2 deletions lego/apps/achievements/views.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
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


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)

0 comments on commit a9e1cde

Please sign in to comment.