diff --git a/judge/views/api/api_v2.py b/judge/views/api/api_v2.py index 4677eece11..192f6f06e6 100644 --- a/judge/views/api/api_v2.py +++ b/judge/views/api/api_v2.py @@ -252,7 +252,6 @@ def get_object_data(self, contest): .order_by('order'), ) - new_ratings_subquery = Rating.objects.filter(participation=OuterRef('pk')) old_ratings_subquery = ( Rating.objects .filter(user=OuterRef('user__pk'), contest__end_time__lt=OuterRef('contest__end_time')) @@ -264,10 +263,10 @@ def get_object_data(self, contest): .annotate( username=F('user__user__username'), old_rating=Subquery(old_ratings_subquery.values('rating')[:1]), - new_rating=Subquery(new_ratings_subquery.values('rating')[:1]), - old_volatility=Subquery(old_ratings_subquery.values('volatility')[:1]), - new_volatility=Subquery(new_ratings_subquery.values('volatility')[:1]), + old_mean=Subquery(old_ratings_subquery.values('mean')[:1]), + old_performance=Subquery(old_ratings_subquery.values('performance')[:1]), ) + .select_related('rating') .order_by('-score', 'cumtime', 'tiebreaker') ) @@ -319,9 +318,11 @@ def get_object_data(self, contest): 'cumulative_time': participation.cumtime, 'tiebreaker': participation.tiebreaker, 'old_rating': participation.old_rating, - 'new_rating': participation.new_rating, - 'old_volatility': participation.old_volatility, - 'new_volatility': participation.new_volatility, + 'new_rating': participation.rating.new_rating if participation.rating else None, + 'old_raw_rating': participation.old_mean, + 'new_raw_rating': participation.rating.new_mean if participation.rating else None, + 'old_performance': participation.old_performance, + 'new_performance': participation.rating.new_performance if participation.rating else None, 'is_disqualified': participation.is_disqualified, 'solutions': contest.format.get_problem_breakdown(participation, problems), } for participation in participations @@ -356,7 +357,6 @@ def get_unfiltered_queryset(self): q |= Q(view_contest_scoreboard=self.request.profile) visible_contests = visible_contests.filter(q) - new_ratings_subquery = Rating.objects.filter(participation=OuterRef('pk')) old_ratings_subquery = ( Rating.objects .filter(user=OuterRef('user__pk'), contest__end_time__lt=OuterRef('contest__end_time')) @@ -368,11 +368,10 @@ def get_unfiltered_queryset(self): .filter(virtual__gte=0, contest__in=visible_contests) .annotate( old_rating=Subquery(old_ratings_subquery.values('rating')[:1]), - new_rating=Subquery(new_ratings_subquery.values('rating')[:1]), - old_volatility=Subquery(old_ratings_subquery.values('volatility')[:1]), - new_volatility=Subquery(new_ratings_subquery.values('volatility')[:1]), + old_mean=Subquery(old_ratings_subquery.values('mean')[:1]), + old_performance=Subquery(old_ratings_subquery.values('performance')[:1]), ) - .select_related('user__user', 'contest') + .select_related('user__user', 'contest', 'rating') .order_by('id') .only( 'user__user__username', @@ -387,9 +386,9 @@ def get_unfiltered_queryset(self): 'is_disqualified', 'virtual', 'old_rating', - 'new_rating', - 'old_volatility', - 'new_volatility', + 'old_mean', + 'old_performance', + 'rating', ) ) @@ -403,9 +402,11 @@ def get_object_data(self, participation): 'cumulative_time': participation.cumtime, 'tiebreaker': participation.tiebreaker, 'old_rating': participation.old_rating, - 'new_rating': participation.new_rating, - 'old_volatility': participation.old_volatility, - 'new_volatility': participation.new_volatility, + 'new_rating': participation.rating.new_rating if participation.rating else None, + 'old_raw_rating': participation.old_mean, + 'new_raw_rating': participation.rating.new_mean if participation.rating else None, + 'old_performance': participation.old_performance, + 'new_performance': participation.rating.new_performance if participation.rating else None, 'is_disqualified': participation.is_disqualified, 'virtual_participation_number': participation.virtual, } @@ -550,7 +551,6 @@ def get_object_data(self, profile): last_rating = profile.ratings.order_by('-contest__end_time').first() - new_ratings_subquery = Rating.objects.filter(participation=OuterRef('pk')) old_ratings_subquery = ( Rating.objects .filter(user=OuterRef('user__pk'), contest__end_time__lt=OuterRef('contest__end_time')) @@ -568,10 +568,10 @@ def get_object_data(self, profile): ) .annotate( old_rating=Subquery(old_ratings_subquery.values('rating')[:1]), - new_rating=Subquery(new_ratings_subquery.values('rating')[:1]), - old_volatility=Subquery(old_ratings_subquery.values('volatility')[:1]), - new_volatility=Subquery(new_ratings_subquery.values('volatility')[:1]), + old_mean=Subquery(old_ratings_subquery.values('mean')[:1]), + old_performance=Subquery(old_ratings_subquery.values('performance')[:1]), ) + .select_related('rating') .order_by('contest__end_time') ) @@ -584,11 +584,11 @@ def get_object_data(self, profile): 'cumulative_time': participation.cumtime, 'tiebreaker': participation.tiebreaker, 'old_rating': participation.old_rating, - 'new_rating': participation.new_rating, + 'new_rating': participation.rating.new_rating if participation.rating else None, 'old_raw_rating': participation.old_mean, - 'new_raw_rating': participation.new_mean, + 'new_raw_rating': participation.rating.new_mean if participation.rating else None, 'old_performance': participation.old_performance, - 'new_performance': participation.new_performance, + 'new_performance': participation.rating.new_performance if participation.rating else None, 'is_disqualified': participation.is_disqualified, })