diff --git a/backend/secfit/workouts/views.py b/backend/secfit/workouts/views.py index 62224c2f9dc535949b6f56074cc3b7b1b86d0d69..f8c1379d897b9bc29a50e443c354df9dac8e1ddd 100644 --- a/backend/secfit/workouts/views.py +++ b/backend/secfit/workouts/views.py @@ -36,6 +36,8 @@ import base64, pickle from django.core.signing import Signer from users.models import User +from rest_framework.views import APIView + @api_view(["GET"]) def api_root(request, format=None): @@ -222,21 +224,16 @@ class ExerciseDetail( def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) -class Leaderboards( - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin, - mixins.DestroyModelMixin, - generics.GenericAPIView, - ): +class Leaderboards(APIView): permission_classes = [permissions.IsAuthenticated] - def get(self, request, *args, **kwargs): - e_id = self.kwargs.get("pk") + def get(self, request, pk): + # User must be logged in if self.request.user: - leaderboardNumbers = ExerciseInstance.objects.filter(Q(exercise__pk=e_id) & Q(workout__visibility='PU')).values('workout__owner__pk').annotate(amount=Sum(F("sets") * F("number"), output_field=IntegerField())).order_by('-amount') + leaderboardNumbers = ExerciseInstance.objects.filter(Q(exercise__pk=pk) & Q(workout__visibility='PU')).values('workout__owner__pk').annotate(amount=Sum(F("sets") * F("number"), output_field=IntegerField())).order_by('-amount') leaderboardResult = [] @@ -261,8 +258,8 @@ class Leaderboards( break else: leaderboardResult.append({"name": currentLoggedInUser.username, "value": 0, "rank": len(leaderboardNumbers) + 1}) - - return Response(json.dumps(leaderboardResult)) + + return Response(leaderboardResult) class ExerciseInstanceList(