diff --git a/src/apps/api/serializers/submissions.py b/src/apps/api/serializers/submissions.py index a8d8ed071..db4b91e91 100644 --- a/src/apps/api/serializers/submissions.py +++ b/src/apps/api/serializers/submissions.py @@ -98,7 +98,8 @@ class Meta: 'scores', 'display_name', 'slug_url', - 'organization' + 'organization', + 'detailed_result' ) extra_kwargs = { "scores": {"read_only": True}, diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index d27a3fe5e..3a2b9c897 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -517,6 +517,7 @@ def get_leaderboard(self, request, pk): } columns = [col for col in query['columns']] submissions_keys = {} + submission_detailed_results = {} for submission in query['submissions']: # count number of entries/number of submissions for the owner of this submission for this phase @@ -529,12 +530,24 @@ def get_leaderboard(self, request, pk): .strftime('%Y-%m-%d') submission_key = f"{submission['owner']}{submission['parent'] or submission['id']}" + + # gather detailed result from submissions for each task + # detailed_results are gathered based on submission key + # `id` is used to fetch the right detailed result in detailed results page + # `detailed_result` url is not needed + submission_detailed_results.setdefault(submission_key, []).append({ + # 'detailed_result': submission['detailed_result'], + 'task': submission['task'], + 'id': submission['id'] + }) + if submission_key not in submissions_keys: submissions_keys[submission_key] = len(response['submissions']) response['submissions'].append({ 'id': submission['id'], 'owner': submission['display_name'] or submission['owner'], 'scores': [], + 'detailed_results': [], 'fact_sheet_answers': submission['fact_sheet_answers'], 'slug_url': submission['slug_url'], 'organization': submission['organization'], @@ -559,6 +572,11 @@ def get_leaderboard(self, request, pk): tempScore['score'] = str(round(float(tempScore["score"]), precision)) response['submissions'][submissions_keys[submission_key]]['scores'].append(tempScore) + # put detailed results in its submission + for k, v in submissions_keys.items(): + response['submissions'][v]['detailed_results'] = submission_detailed_results[k] + print(f"\n{response['submissions']}\n") + for task in query['tasks']: # This can be used to rendered variable columns on each task tempTask = { diff --git a/src/static/riot/competitions/detail/leaderboards.tag b/src/static/riot/competitions/detail/leaderboards.tag index d289060ef..8ac68917a 100644 --- a/src/static/riot/competitions/detail/leaderboards.tag +++ b/src/static/riot/competitions/detail/leaderboards.tag @@ -30,7 +30,6 @@