Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit d14d50d

Browse files
authored
Merge pull request #3 from topcoder-platform/metadata
Add metadata from review summation
2 parents 31840d9 + db011fc commit d14d50d

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

config/default.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module.exports = {
2020
GROUP_IDS: process.env.GROUP_IDS || '202343,20000000', // Comma separated string of Group IDs
2121

2222
SUBMISSION_API_URL: process.env.SUBMISSION_API_URL || 'https://api.topcoder-dev.com/v5/submissions',
23+
REVIEW_SUMMATION_API_URL: process.env.REVIEW_SUMMATION_API_URL || 'https://api.topcoder-dev.com/v5/reviewSummations',
2324
CHALLENGE_API_URL: process.env.CHALLENGE_API_URL || 'https://api.topcoder-dev.com/v3/challenges',
2425
MEMBER_API_URL: process.env.MEMBER_API_URL || 'https://api.topcoder-dev.com/v3/users',
2526

src/models/Leaderboard.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const LeaderboardSchema = new Schema({
1010
challengeId: { type: String },
1111
memberId: { type: String },
1212
handle: { type: String },
13-
aggregateScore: { type: Number }
13+
aggregateScore: { type: Number },
14+
testsPassed: { type: Number }
1415
})
1516

1617
module.exports = {

src/services/ProcessorService.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,41 @@ const logger = require('../common/logger')
88
const helper = require('../common/helper')
99
const { Leaderboard } = require('../models')
1010

11+
/**
12+
* Returns the tests passed using the metadata information
13+
* @param {object} metadata the object from which to retrieve the tests passed
14+
*/
15+
function getTestsPassed (metadata = {}) {
16+
const tests = metadata.tests || {}
17+
18+
let testsPassed = tests.total - tests.pending - tests.failed
19+
20+
if (!testsPassed) {
21+
testsPassed = 0
22+
}
23+
24+
return testsPassed
25+
}
26+
1127
/**
1228
* Handle create / update topic messages from Kafka queue
1329
* @param {Object} message the Kafka message in JSON format
1430
*/
1531
const upsert = async (message) => {
16-
// const existRecord = await Leaderboard.findOne({$and: [{challengeId: }]})
17-
1832
const submission = await helper.reqToAPI(`${config.SUBMISSION_API_URL}/${message.payload.submissionId}`)
1933

20-
// const existRecord = await Leaderboard.findOne({ reviewSummationId: message.payload.id })
2134
const existRecord = await Leaderboard.findOne({$and: [{challengeId: submission.body.challengeId}, {memberId: submission.body.memberId}]})
2235

36+
const reviewSummation = await helper.reqToAPI(`${config.REVIEW_SUMMATION_API_URL}/${message.payload.id}`)
37+
38+
let testsPassed
39+
40+
if (reviewSummation.metadata) {
41+
testsPassed = getTestsPassed(reviewSummation.metadata)
42+
} else {
43+
testsPassed = 0
44+
}
45+
2346
if (existRecord) {
2447
logger.debug(`Record with ID # ${message.payload.id} exists in database. Updating the score`)
2548
await Leaderboard.updateOne(
@@ -29,13 +52,14 @@ const upsert = async (message) => {
2952
{
3053
$set: {
3154
aggregateScore: message.payload.aggregateScore,
32-
reviewSummationId: message.payload.id
55+
reviewSummationId: message.payload.id,
56+
testsPassed
3357
}
3458
}
3559
)
3660
} else {
3761
logger.debug(`Record with ID # ${message.payload.id} does not exists in database. Creating the record`)
38-
// const submission = await helper.reqToAPI(`${config.SUBMISSION_API_URL}/${message.payload.submissionId}`)
62+
3963
const challengeDetail = await helper.reqToAPI(`${config.CHALLENGE_API_URL}?filter=id=${submission.body.challengeId}`)
4064

4165
if (!helper.isGroupIdValid(challengeDetail.body.result.content[0].groupIds)) {
@@ -53,7 +77,8 @@ const upsert = async (message) => {
5377
memberId: submission.body.memberId,
5478
challengeId: submission.body.challengeId,
5579
handle: memberDetail.body.result.content[0].handle,
56-
aggregateScore: message.payload.aggregateScore
80+
aggregateScore: message.payload.aggregateScore,
81+
testsPassed
5782
}
5883

5984
await Leaderboard.create(record)

0 commit comments

Comments
 (0)