Skip to content

Commit

Permalink
Merge pull request #99 from swecc-uw/include-rank-in-attendance-ldb
Browse files Browse the repository at this point in the history
Include rank in attendance leaderboard endpoint
  • Loading branch information
Advayp authored Jan 5, 2025
2 parents 86fa38e + 00e0938 commit b225f45
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
1 change: 1 addition & 0 deletions server/engagement/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class Meta:

class AttendanceStatsSerializer(serializers.ModelSerializer):
member = UsernameSerializer(read_only=True)
rank = serializers.IntegerField()

class Meta:
model = AttendanceSessionStats
Expand Down
11 changes: 8 additions & 3 deletions server/leaderboard/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
from engagement.models import AttendanceSessionStats
from rest_framework.pagination import PageNumberPagination
from rest_framework.views import APIView
from django.db.models import Window
from django.db.models.functions import RowNumber

logger = logging.getLogger(__name__)
INTERNSHIP_CHANNEL_ID = int(os.getenv("INTERNSHIP_CHANNEL_ID"))
Expand Down Expand Up @@ -303,8 +305,8 @@ def get(self, request):
raise ValidationError("updated_within must be a valid number of hours")

ordering_options = {
"attendance": "-sessions_attended",
"recent": "-last_updated",
"attendance": "sessions_attended",
"recent": "last_updated",
}

order_field = ordering_options.get(order_by)
Expand All @@ -314,7 +316,10 @@ def get(self, request):
)
paginator = self.pagination_class()
result_page = paginator.paginate_queryset(
queryset.order_by(order_field), request
queryset.annotate(
rank=Window(expression=RowNumber(), order_by=F(order_field).desc())
).order_by(f"-{order_field}"),
request,
)

serializer = AttendanceStatsSerializer(result_page, many=True)
Expand Down

0 comments on commit b225f45

Please sign in to comment.