Skip to content

Commit eba6b8d

Browse files
authored
Merge pull request #112 from topcoder-platform/PM-4151-7
PM-4151: guard MM provisional review fallback
2 parents 58e265d + f7b0459 commit eba6b8d

8 files changed

Lines changed: 299 additions & 47 deletions

File tree

sql/reports/challenges/submitters.sql

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
WITH challenge_context AS (
22
SELECT
33
c.id,
4-
(ct.name = 'Marathon Match') AS is_marathon_match
4+
(ct.name = 'Marathon Match') AS is_marathon_match,
5+
(c.status = 'COMPLETED') AS is_completed
56
FROM challenges."Challenge" AS c
67
JOIN challenges."ChallengeType" AS ct
78
ON ct.id = c."typeId"
@@ -17,17 +18,46 @@ submission_metrics AS (
1718
s."finalScore"::double precision,
1819
s."initialScore"::double precision
1920
) AS standard_score,
20-
provisional_review.provisional_score,
21-
COALESCE(
22-
final_review."aggregateScore",
23-
s."finalScore"::double precision
24-
) AS final_score_raw
21+
CASE
22+
WHEN s.status IN (
23+
'FAILED_SCREENING',
24+
'FAILED_REVIEW',
25+
'FAILED_CHECKPOINT_SCREENING',
26+
'FAILED_CHECKPOINT_REVIEW',
27+
'DELETED'
28+
) THEN NULL
29+
WHEN provisional_review.has_provisional_review THEN CASE
30+
WHEN provisional_review.provisional_score >= 0 THEN provisional_review.provisional_score
31+
ELSE NULL
32+
END
33+
WHEN s."initialScore"::double precision >= 0 THEN s."initialScore"::double precision
34+
ELSE NULL
35+
END AS provisional_score,
36+
CASE
37+
WHEN NOT cc.is_completed THEN NULL
38+
WHEN s.status IN (
39+
'FAILED_SCREENING',
40+
'FAILED_REVIEW',
41+
'FAILED_CHECKPOINT_SCREENING',
42+
'FAILED_CHECKPOINT_REVIEW',
43+
'DELETED'
44+
) THEN NULL
45+
WHEN final_review.has_final_review THEN CASE
46+
WHEN final_review."aggregateScore" >= 0 THEN final_review."aggregateScore"
47+
ELSE NULL
48+
END
49+
WHEN s."finalScore"::double precision >= 0 THEN s."finalScore"::double precision
50+
ELSE NULL
51+
END AS final_score_raw,
52+
cc.is_completed
2553
FROM challenge_context AS cc
2654
JOIN reviews."submission" AS s
2755
ON s."challengeId" = cc.id
2856
AND s."memberId" IS NOT NULL
2957
LEFT JOIN LATERAL (
30-
SELECT rs."aggregateScore"
58+
SELECT
59+
TRUE AS has_final_review,
60+
rs."aggregateScore"
3161
FROM reviews."reviewSummation" AS rs
3262
WHERE rs."submissionId" = s.id
3363
AND COALESCE(rs."isFinal", TRUE) = TRUE
@@ -36,7 +66,9 @@ submission_metrics AS (
3666
LIMIT 1
3767
) AS final_review ON TRUE
3868
LEFT JOIN LATERAL (
39-
SELECT rs."aggregateScore" AS provisional_score
69+
SELECT
70+
TRUE AS has_provisional_review,
71+
rs."aggregateScore" AS provisional_score
4072
FROM reviews."reviewSummation" AS rs
4173
WHERE rs."submissionId" = s.id
4274
AND rs."isProvisional" IS TRUE
@@ -73,9 +105,12 @@ mm_latest_submission_scores AS (
73105
sm."memberId",
74106
sm.provisional_score AS provisional_score_raw,
75107
sm.final_score_raw,
76-
COALESCE(sm.final_score_raw, sm.provisional_score) AS effective_score_raw,
108+
sm.is_completed,
77109
sm.submission_timestamp
78110
FROM submission_metrics AS sm
111+
WHERE
112+
sm.provisional_score IS NOT NULL
113+
OR sm.final_score_raw IS NOT NULL
79114
ORDER BY
80115
sm."memberId",
81116
sm.submission_timestamp DESC NULLS LAST,
@@ -93,13 +128,13 @@ mm_ranked_scores AS (
93128
ELSE ROUND(mlss.final_score_raw::numeric, 2)
94129
END AS "finalScore",
95130
CASE
96-
WHEN mlss.effective_score_raw IS NULL THEN NULL
97-
ELSE ROW_NUMBER() OVER (
131+
WHEN mlss.is_completed AND mlss.final_score_raw IS NOT NULL THEN ROW_NUMBER() OVER (
98132
ORDER BY
99-
mlss.effective_score_raw DESC NULLS LAST,
133+
mlss.final_score_raw DESC NULLS LAST,
100134
mlss.submission_timestamp ASC NULLS LAST,
101135
mlss."memberId" ASC
102136
)
137+
ELSE NULL
103138
END AS "finalRank"
104139
FROM mm_latest_submission_scores AS mlss
105140
)
@@ -177,6 +212,10 @@ ORDER BY
177212
WHEN sm.is_marathon_match THEN mrs."finalRank"
178213
ELSE NULL
179214
END ASC NULLS LAST,
215+
CASE
216+
WHEN sm.is_marathon_match AND mrs."finalRank" IS NULL THEN mrs."provisionalScore"
217+
ELSE NULL
218+
END DESC NULLS LAST,
180219
CASE
181220
WHEN sm.is_marathon_match THEN NULL
182221
ELSE sms."submissionScore"

sql/reports/challenges/valid-submitters.sql

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
WITH challenge_context AS (
22
SELECT
33
c.id,
4-
(ct.name = 'Marathon Match') AS is_marathon_match
4+
(ct.name = 'Marathon Match') AS is_marathon_match,
5+
(c.status = 'COMPLETED') AS is_completed
56
FROM challenges."Challenge" AS c
67
JOIN challenges."ChallengeType" AS ct
78
ON ct.id = c."typeId"
@@ -17,11 +18,38 @@ submission_metrics AS (
1718
s."finalScore"::double precision,
1819
s."initialScore"::double precision
1920
) AS standard_score,
20-
provisional_review.provisional_score,
21-
COALESCE(
22-
final_review."aggregateScore",
23-
s."finalScore"::double precision
24-
) AS final_score_raw,
21+
CASE
22+
WHEN s.status IN (
23+
'FAILED_SCREENING',
24+
'FAILED_REVIEW',
25+
'FAILED_CHECKPOINT_SCREENING',
26+
'FAILED_CHECKPOINT_REVIEW',
27+
'DELETED'
28+
) THEN NULL
29+
WHEN provisional_review.has_provisional_review THEN CASE
30+
WHEN provisional_review.provisional_score >= 0 THEN provisional_review.provisional_score
31+
ELSE NULL
32+
END
33+
WHEN s."initialScore"::double precision >= 0 THEN s."initialScore"::double precision
34+
ELSE NULL
35+
END AS provisional_score,
36+
CASE
37+
WHEN NOT cc.is_completed THEN NULL
38+
WHEN s.status IN (
39+
'FAILED_SCREENING',
40+
'FAILED_REVIEW',
41+
'FAILED_CHECKPOINT_SCREENING',
42+
'FAILED_CHECKPOINT_REVIEW',
43+
'DELETED'
44+
) THEN NULL
45+
WHEN final_review.has_final_review THEN CASE
46+
WHEN final_review."aggregateScore" >= 0 THEN final_review."aggregateScore"
47+
ELSE NULL
48+
END
49+
WHEN s."finalScore"::double precision >= 0 THEN s."finalScore"::double precision
50+
ELSE NULL
51+
END AS final_score_raw,
52+
cc.is_completed,
2553
(
2654
passing_review.is_passing IS TRUE
2755
OR COALESCE(s."finalScore"::double precision, 0) > 98
@@ -31,7 +59,9 @@ submission_metrics AS (
3159
ON s."challengeId" = cc.id
3260
AND s."memberId" IS NOT NULL
3361
LEFT JOIN LATERAL (
34-
SELECT rs."aggregateScore"
62+
SELECT
63+
TRUE AS has_final_review,
64+
rs."aggregateScore"
3565
FROM reviews."reviewSummation" AS rs
3666
WHERE rs."submissionId" = s.id
3767
AND COALESCE(rs."isFinal", TRUE) = TRUE
@@ -40,7 +70,9 @@ submission_metrics AS (
4070
LIMIT 1
4171
) AS final_review ON TRUE
4272
LEFT JOIN LATERAL (
43-
SELECT rs."aggregateScore" AS provisional_score
73+
SELECT
74+
TRUE AS has_provisional_review,
75+
rs."aggregateScore" AS provisional_score
4476
FROM reviews."reviewSummation" AS rs
4577
WHERE rs."submissionId" = s.id
4678
AND rs."isProvisional" IS TRUE
@@ -90,9 +122,12 @@ mm_latest_submission_scores AS (
90122
vsm."memberId",
91123
vsm.provisional_score AS provisional_score_raw,
92124
vsm.final_score_raw,
93-
COALESCE(vsm.final_score_raw, vsm.provisional_score) AS effective_score_raw,
125+
vsm.is_completed,
94126
vsm.submission_timestamp
95127
FROM valid_submission_metrics AS vsm
128+
WHERE
129+
vsm.provisional_score IS NOT NULL
130+
OR vsm.final_score_raw IS NOT NULL
96131
ORDER BY
97132
vsm."memberId",
98133
vsm.submission_timestamp DESC NULLS LAST,
@@ -110,13 +145,13 @@ mm_ranked_scores AS (
110145
ELSE ROUND(mlss.final_score_raw::numeric, 2)
111146
END AS "finalScore",
112147
CASE
113-
WHEN mlss.effective_score_raw IS NULL THEN NULL
114-
ELSE ROW_NUMBER() OVER (
148+
WHEN mlss.is_completed AND mlss.final_score_raw IS NOT NULL THEN ROW_NUMBER() OVER (
115149
ORDER BY
116-
mlss.effective_score_raw DESC NULLS LAST,
150+
mlss.final_score_raw DESC NULLS LAST,
117151
mlss.submission_timestamp ASC NULLS LAST,
118152
mlss."memberId" ASC
119153
)
154+
ELSE NULL
120155
END AS "finalRank"
121156
FROM mm_latest_submission_scores AS mlss
122157
)
@@ -194,6 +229,10 @@ ORDER BY
194229
WHEN vsm.is_marathon_match THEN mrs."finalRank"
195230
ELSE NULL
196231
END ASC NULLS LAST,
232+
CASE
233+
WHEN vsm.is_marathon_match AND mrs."finalRank" IS NULL THEN mrs."provisionalScore"
234+
ELSE NULL
235+
END DESC NULLS LAST,
197236
CASE
198237
WHEN vsm.is_marathon_match THEN NULL
199238
ELSE sms."submissionScore"

sql/reports/challenges/winners.sql

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
WITH challenge_context AS (
22
SELECT
33
c.id,
4-
(ct.name = 'Marathon Match') AS is_marathon_match
4+
(ct.name = 'Marathon Match') AS is_marathon_match,
5+
(c.status = 'COMPLETED') AS is_completed
56
FROM challenges."Challenge" AS c
67
JOIN challenges."ChallengeType" AS ct
78
ON ct.id = c."typeId"
@@ -15,17 +16,45 @@ submission_metrics AS (
1516
s."finalScore"::double precision,
1617
s."initialScore"::double precision
1718
) AS standard_score,
18-
provisional_review.provisional_score,
19-
COALESCE(
20-
final_review."aggregateScore",
21-
s."finalScore"::double precision
22-
) AS final_score_raw
19+
CASE
20+
WHEN s.status IN (
21+
'FAILED_SCREENING',
22+
'FAILED_REVIEW',
23+
'FAILED_CHECKPOINT_SCREENING',
24+
'FAILED_CHECKPOINT_REVIEW',
25+
'DELETED'
26+
) THEN NULL
27+
WHEN provisional_review.has_provisional_review THEN CASE
28+
WHEN provisional_review.provisional_score >= 0 THEN provisional_review.provisional_score
29+
ELSE NULL
30+
END
31+
WHEN s."initialScore"::double precision >= 0 THEN s."initialScore"::double precision
32+
ELSE NULL
33+
END AS provisional_score,
34+
CASE
35+
WHEN NOT cc.is_completed THEN NULL
36+
WHEN s.status IN (
37+
'FAILED_SCREENING',
38+
'FAILED_REVIEW',
39+
'FAILED_CHECKPOINT_SCREENING',
40+
'FAILED_CHECKPOINT_REVIEW',
41+
'DELETED'
42+
) THEN NULL
43+
WHEN final_review.has_final_review THEN CASE
44+
WHEN final_review."aggregateScore" >= 0 THEN final_review."aggregateScore"
45+
ELSE NULL
46+
END
47+
WHEN s."finalScore"::double precision >= 0 THEN s."finalScore"::double precision
48+
ELSE NULL
49+
END AS final_score_raw
2350
FROM challenge_context AS cc
2451
JOIN reviews."submission" AS s
2552
ON s."challengeId" = cc.id
2653
AND s."memberId" IS NOT NULL
2754
LEFT JOIN LATERAL (
28-
SELECT rs."aggregateScore"
55+
SELECT
56+
TRUE AS has_final_review,
57+
rs."aggregateScore"
2958
FROM reviews."reviewSummation" AS rs
3059
WHERE rs."submissionId" = s.id
3160
AND COALESCE(rs."isFinal", TRUE) = TRUE
@@ -34,15 +63,20 @@ submission_metrics AS (
3463
LIMIT 1
3564
) AS final_review ON TRUE
3665
LEFT JOIN LATERAL (
37-
SELECT MAX(rs."aggregateScore") AS provisional_score
66+
SELECT
67+
TRUE AS has_provisional_review,
68+
rs."aggregateScore" AS provisional_score
3869
FROM reviews."reviewSummation" AS rs
3970
WHERE rs."submissionId" = s.id
4071
AND rs."isProvisional" IS TRUE
72+
ORDER BY COALESCE(rs."reviewedDate", rs."createdAt") DESC NULLS LAST, rs.id DESC
73+
LIMIT 1
4174
) AS provisional_review ON TRUE
4275
),
4376
winner_members AS MATERIALIZED (
4477
SELECT
4578
cc.is_marathon_match,
79+
cc.is_completed,
4680
cw."userId"::text AS "memberId",
4781
MAX(cw.handle) AS "winnerHandle",
4882
MIN(cw.placement) AS placement
@@ -52,6 +86,7 @@ winner_members AS MATERIALIZED (
5286
AND cw.type = 'PLACEMENT'
5387
GROUP BY
5488
cc.is_marathon_match,
89+
cc.is_completed,
5590
cw."userId"
5691
),
5792
standard_member_scores AS (
@@ -126,7 +161,7 @@ SELECT
126161
ELSE NULL
127162
END AS "finalScore",
128163
CASE
129-
WHEN wm.is_marathon_match THEN wm.placement
164+
WHEN wm.is_marathon_match AND wm.is_completed THEN wm.placement
130165
ELSE NULL
131166
END AS "finalRank"
132167
FROM winner_members AS wm

0 commit comments

Comments
 (0)