from django.http.request import HttpRequest from ninja import Router from collections import defaultdict from accounts.models import CustomUser from animations.schemas import RankingSchema from submissions.models import PuzzleResponse, SteamCollectionItem router = Router() @router.get("results", response=RankingSchema) def results(request: HttpRequest) -> dict: responses_by_userid = defaultdict(list) responses_by_puzzleid = defaultdict(list) for response in list( PuzzleResponse.objects.filter(needs_manual_validation=False) .filter_user_best_response() .prefetch_related("submission__user") ): responses_by_userid[response.submission.user.id].append(response) responses_by_puzzleid[response.puzzle.id].append(response) ranking = {} for puzzle_id, responses in responses_by_puzzleid.items(): ranking[puzzle_id] = sorted(responses, key=lambda x: x.rank_points) return { "users": CustomUser.objects.filter(pk__in=responses_by_userid.keys()), "puzzles": SteamCollectionItem.objects.all(), "responses_by_userid": responses_by_userid, "ranking_by_puzzle": ranking, }