From e5b49bf13540dcb0816aa960ab5ed597a0899bd9 Mon Sep 17 00:00:00 2001 From: Amrit Prakash Date: Sat, 11 Mar 2023 14:19:17 +0530 Subject: [PATCH 1/2] Generate Data for Monthly LeaderBoard --- website/api/views.py | 34 +++++++++++++++++++++++++++------- website/views.py | 2 +- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/website/api/views.py b/website/api/views.py index 40bed1f1f3..7f2976df50 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -275,8 +275,6 @@ def get_queryset(self): return User.objects.all() def filter(self,request,*args,**kwargs): - - paginator = PageNumberPagination() global_leaderboard = LeaderboardBase() month = self.request.query_params.get("month") @@ -299,12 +297,34 @@ def filter(self,request,*args,**kwargs): return Response(f"Invalid month or year passed",status=400) queryset = global_leaderboard.get_leaderboard(month,year,api=True) - - page = paginator.paginate_queryset(queryset,request) - return paginator.get_paginated_response(page) - - + users= list() + rank_user =1 + for each in queryset : + temp = dict() + temp["rank"]=rank_user + temp["id"]=each["id"] + temp["User"]=each["username"] + temp["score"] = Points.objects.filter(user=each["id"]).aggregate( + total_score=Sum("score") + ) + temp["image"] = list( + UserProfile.objects.filter(user=each["id"]).values("user_avatar") + )[0] + temp["title_type"] = list( + UserProfile.objects.filter(user=each["id"]).values("title") + )[0] + temp["follows"] = list( + UserProfile.objects.filter(user=each["id"]).values("follows") + )[0] + temp["savedissue"] = list( + UserProfile.objects.filter(user=each["id"]).values("issue_saved") + )[0] + rank_user = rank_user+1 + users.append(temp) + + return Response(users) + def group_by_month(self,request,*args,**kwargs): diff --git a/website/views.py b/website/views.py index b7bd3b2f0b..2a64e3aa09 100644 --- a/website/views.py +++ b/website/views.py @@ -1254,7 +1254,7 @@ def get_leaderboard(self,month=None,year=None,api=False): ) ) if api: - return data.values('username','total_score') + return data.values('id','username','total_score') return data From 0b970b1a0d8178714e6896561d3953b940094ccc Mon Sep 17 00:00:00 2001 From: Amrit Prakash <65587505+solo-daemon@users.noreply.github.com> Date: Mon, 13 Mar 2023 02:25:54 +0530 Subject: [PATCH 2/2] Update views.py --- website/api/views.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/website/api/views.py b/website/api/views.py index 7e28bdda6e..a0186cffef 100644 --- a/website/api/views.py +++ b/website/api/views.py @@ -282,6 +282,8 @@ def get_queryset(self): return User.objects.all() def filter(self,request,*args,**kwargs): + + paginator = PageNumberPagination() global_leaderboard = LeaderboardBase() month = self.request.query_params.get("month") @@ -303,7 +305,7 @@ def filter(self,request,*args,**kwargs): except: return Response(f"Invalid month or year passed",status=400) - queryset = global_leaderboard.get_leaderboard(month,year,api=True) + queryset = global_leaderboard.get_leaderboard(month,year,api=True) users= list() rank_user =1 for each in queryset : @@ -329,7 +331,8 @@ def filter(self,request,*args,**kwargs): rank_user = rank_user+1 users.append(temp) - return Response(users) + page = paginator.paginate_queryset(users,request) + return paginator.get_paginated_response(page) def group_by_month(self,request,*args,**kwargs): @@ -415,4 +418,4 @@ def post(self, request, *args, **kwargs): return Response({"found": True, "issue": data}) else: - return Response({"found": False}) \ No newline at end of file + return Response({"found": False})