diff --git a/src/apps/review/src/lib/hooks/useFetchChallengeResults.ts b/src/apps/review/src/lib/hooks/useFetchChallengeResults.ts index f9226d757..ec537cab9 100644 --- a/src/apps/review/src/lib/hooks/useFetchChallengeResults.ts +++ b/src/apps/review/src/lib/hooks/useFetchChallengeResults.ts @@ -23,6 +23,9 @@ import { import { fetchChallengeReviews } from '../services' import { ChallengeDetailContext } from '../contexts' import { PAST_CHALLENGE_STATUSES } from '../utils/challengeStatus' +import { + SUBMISSION_TYPE_CONTEST, +} from '../constants' type ResourceMemberMapping = ChallengeDetailContextModel['resourceMemberIdMapping'] @@ -135,8 +138,16 @@ const buildProjectResult = ({ // Find all submissions for this member const memberSubmissions = submissions.filter(s => s.memberId === memberId) + const contestSubmissions = memberSubmissions.filter( + submission => (submission.type ?? SUBMISSION_TYPE_CONTEST) === SUBMISSION_TYPE_CONTEST, + ) + + // Prefer contest submissions; fall back to everything so we still display something if data is inconsistent + const submissionsToEvaluate = contestSubmissions.length + ? contestSubmissions + : memberSubmissions - if (!memberSubmissions.length) { + if (!submissionsToEvaluate.length) { return undefined } @@ -148,7 +159,7 @@ const buildProjectResult = ({ computedInitialScore: number } - const evaluated: EvaluatedSubmission[] = memberSubmissions.map(submission => { + const evaluated: EvaluatedSubmission[] = submissionsToEvaluate.map(submission => { const fallbackReviews = submission?.reviews ?? [] const mappedReviews = reviewsBySubmissionId.get(submission.id) ?? fallbackReviews const orderedReviews = orderReviewsByCreatedDate(mappedReviews) diff --git a/src/apps/review/src/lib/models/BackendChallengeInfo.model.ts b/src/apps/review/src/lib/models/BackendChallengeInfo.model.ts index ec21cac27..70f3f7b9b 100644 --- a/src/apps/review/src/lib/models/BackendChallengeInfo.model.ts +++ b/src/apps/review/src/lib/models/BackendChallengeInfo.model.ts @@ -1,6 +1,7 @@ import moment from 'moment' import { formatDurationDate } from '../utils' +import { SUBMISSION_TYPE_CONTEST } from '../constants' import { TABLE_DATE_FORMAT } from '../../config/index.config' import { BackendMetadata } from './BackendMetadata.model' @@ -108,15 +109,22 @@ function normalizeTrack( function mapWinners( winners: BackendChallengeInfo['winners'], ): ChallengeWinner[] | undefined { - return winners - ? winners.map(winner => ({ - handle: winner.handle, - maxRating: winner.maxRating ?? undefined, - placement: winner.placement, - type: winner.type, - userId: winner.userId, - })) - : undefined + if (!winners) { + return undefined + } + + // Only expose contest submissions in the winners list + const contestWinners = winners.filter(winner => ( + (winner.type ?? SUBMISSION_TYPE_CONTEST) === SUBMISSION_TYPE_CONTEST + )) + + return contestWinners.map(winner => ({ + handle: winner.handle, + maxRating: winner.maxRating ?? undefined, + placement: winner.placement, + type: winner.type, + userId: winner.userId, + })) } /**