Skip to content

Commit 646d2c0

Browse files
authored
Merge pull request #7144 from topcoder-platform/develop
Additional ranking fix
2 parents 9671450 + 358ec51 commit 646d2c0

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/shared/utils/mm-review-summations.js

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ function ensureSubmissionEntry(existingEntry, { submissionId, timestamp, timesta
5454
const baseEntry = {
5555
submissionId,
5656
submissionTime: timestamp || null,
57+
isLatest: null,
5758
provisionalScore: null,
5859
finalScore: null,
5960
status: 'completed',
@@ -80,6 +81,7 @@ function ensureSubmissionEntry(existingEntry, { submissionId, timestamp, timesta
8081
...existingEntry,
8182
submissionId: existingEntry.submissionId || submissionId,
8283
submissionTime: existingEntry.submissionTime || baseEntry.submissionTime,
84+
isLatest: existingEntry.isLatest === undefined ? baseEntry.isLatest : existingEntry.isLatest,
8385
status: existingEntry.status || 'completed',
8486
reviewSummations,
8587
reviewSummation,
@@ -128,6 +130,7 @@ function updateSubmissionEntry(existingEntry, {
128130
normalizedScore,
129131
summation,
130132
isProvisional,
133+
isLatest,
131134
}) {
132135
const baseEntry = ensureSubmissionEntry(existingEntry, {
133136
submissionId,
@@ -137,10 +140,12 @@ function updateSubmissionEntry(existingEntry, {
137140
const {
138141
submissionTime: baseSubmissionTime,
139142
latestTimestamp: baseLatestTimestamp,
143+
isLatest: baseIsLatest,
140144
} = baseEntry;
141145

142146
let submissionTime = baseSubmissionTime;
143147
let latestTimestamp = baseLatestTimestamp;
148+
let submissionIsLatest = baseIsLatest;
144149

145150
if (timestampValue > latestTimestamp) {
146151
latestTimestamp = timestampValue;
@@ -149,6 +154,10 @@ function updateSubmissionEntry(existingEntry, {
149154
submissionTime = timestamp;
150155
}
151156

157+
if (!_.isNil(isLatest)) {
158+
submissionIsLatest = Boolean(isLatest);
159+
}
160+
152161
const provisionalResult = isProvisional
153162
? mergeScoreData(
154163
baseEntry.provisionalMeta,
@@ -173,6 +182,7 @@ function updateSubmissionEntry(existingEntry, {
173182
...baseEntry,
174183
submissionTime,
175184
latestTimestamp,
185+
isLatest: submissionIsLatest,
176186
provisionalMeta: provisionalResult.meta,
177187
provisionalScore: provisionalResult.value,
178188
finalMeta: finalResult.meta,
@@ -278,8 +288,6 @@ export function buildMmSubmissionData(reviewSummations = []) {
278288
memberId: null,
279289
rating: null,
280290
submissionsMap: new Map(),
281-
bestProvisionalScore: null,
282-
bestFinalScore: null,
283291
});
284292
}
285293

@@ -302,7 +310,7 @@ export function buildMmSubmissionData(reviewSummations = []) {
302310

303311
const normalizedScore = normalizeScoreValue(_.get(summation, 'aggregateScore'));
304312
const isProvisional = Boolean(summation.isProvisional);
305-
const isLatest = _.isNil(summation.isLatest) ? true : Boolean(summation.isLatest);
313+
const isLatest = _.isNil(summation.isLatest) ? null : Boolean(summation.isLatest);
306314

307315
const updatedEntry = updateSubmissionEntry(memberEntry.submissionsMap.get(submissionId), {
308316
submissionId,
@@ -311,28 +319,18 @@ export function buildMmSubmissionData(reviewSummations = []) {
311319
normalizedScore,
312320
summation,
313321
isProvisional,
322+
isLatest,
314323
});
315324

316325
memberEntry.submissionsMap.set(submissionId, updatedEntry);
317-
318-
if (!_.isNil(normalizedScore) && isLatest) {
319-
if (isProvisional) {
320-
memberEntry.bestProvisionalScore = _.isNil(memberEntry.bestProvisionalScore)
321-
? normalizedScore
322-
: Math.max(memberEntry.bestProvisionalScore, normalizedScore);
323-
} else {
324-
memberEntry.bestFinalScore = _.isNil(memberEntry.bestFinalScore)
325-
? normalizedScore
326-
: Math.max(memberEntry.bestFinalScore, normalizedScore);
327-
}
328-
}
329326
});
330327

331328
const members = Array.from(membersByHandle.values()).map((memberEntry) => {
332329
const submissions = Array.from(memberEntry.submissionsMap.values())
333330
.map(submission => ({
334331
submissionId: submission.submissionId,
335332
submissionTime: submission.submissionTime,
333+
isLatest: submission.isLatest,
336334
provisionalScore: _.isNil(submission.provisionalScore) ? null : submission.provisionalScore,
337335
finalScore: _.isNil(submission.finalScore) ? null : submission.finalScore,
338336
status: submission.status || 'completed',
@@ -341,6 +339,20 @@ export function buildMmSubmissionData(reviewSummations = []) {
341339
}))
342340
.sort((a, b) => toTimestampValue(b.submissionTime) - toTimestampValue(a.submissionTime));
343341

342+
const hasLatestFlag = submissions.some(s => !_.isNil(s.isLatest));
343+
const latestSubmissions = hasLatestFlag ? submissions.filter(s => s.isLatest) : submissions;
344+
const candidates = latestSubmissions.length ? latestSubmissions : submissions;
345+
const bestProvisionalScore = _.chain(candidates)
346+
.map(s => (_.isNil(s.provisionalScore) ? null : s.provisionalScore))
347+
.filter(s => !_.isNil(s))
348+
.max()
349+
.value() || null;
350+
const bestFinalScore = _.chain(candidates)
351+
.map(s => (_.isNil(s.finalScore) ? null : s.finalScore))
352+
.filter(s => !_.isNil(s))
353+
.max()
354+
.value() || null;
355+
344356
const rating = _.isNil(memberEntry.rating) ? null : memberEntry.rating;
345357
const memberId = memberEntry.memberId ? _.toString(memberEntry.memberId) : null;
346358

@@ -358,8 +370,8 @@ export function buildMmSubmissionData(reviewSummations = []) {
358370
provisionalRank: null,
359371
finalRank: null,
360372
submissions,
361-
bestProvisionalScore: memberEntry.bestProvisionalScore,
362-
bestFinalScore: memberEntry.bestFinalScore,
373+
bestProvisionalScore,
374+
bestFinalScore,
363375
};
364376
});
365377

0 commit comments

Comments
 (0)