Skip to content

Commit f17135b

Browse files
author
Sachin Maheshwari
committed
adding 'Challenge checkpoint review' support
1 parent 5813c28 commit f17135b

File tree

4 files changed

+78
-1
lines changed

4 files changed

+78
-1
lines changed

config/default.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ module.exports = {
4646

4747
KAFKA_CONSUMER_RULESETS: {
4848
// key is Kafka topic name, value is array of ruleset which have key as handler function name defined in src/processors/index.js
49-
'challenge.notification.events' : [{handleChallenge : {type:'UPDATE_DRAFT_CHALLENGE', roles: ["Submitter" /** Competitor */, "Copilot", "Reviewer"]}}],
49+
'challenge.notification.events': [{ handleChallenge: { type: 'UPDATE_DRAFT_CHALLENGE', roles: ["Submitter" /** Competitor */, "Copilot", "Reviewer"] } }],
50+
'notifications.autopilot.events': [{ handleAutoPilot: { phaseTypeName: 'Checkpoint Screening', state: 'START', roles: ["Copilot", "Reviewer"] } }],
5051
//'notifications.community.challenge.created': ['handleChallengeCreated'],
5152
//'notifications.community.challenge.phasewarning': ['handleChallengePhaseWarning'],
5253
},
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* Challenge Autopilot general handler.
3+
*/
4+
const co = require('co');
5+
const service = require('../../services/AutoPilotService');
6+
7+
/**
8+
* Handle Kafka JSON message of autopilot.
9+
*
10+
* @param {Object} message the Kafka JSON message
11+
* @param {Object} ruleSets
12+
*
13+
* @return {Promise} promise resolved to notifications
14+
*/
15+
const handle = (message, ruleSets) => co(function* () {
16+
return yield service.handle(message, ruleSets);
17+
});
18+
19+
module.exports = {
20+
handle,
21+
};

src/processors/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
const ChallengeCreatedHandler = require('./challenge/ChallengeCreatedHandler');
77
const ChallengePhaseWarningHandler = require('./challenge/ChallengePhaseWarningHandler');
88
const ChallengeHandler = require('./challenge/ChallengeHandler');
9+
const AutoPilotHandler = require('./challenge/AutoPilotHandler')
910

1011
// Exports
1112
module.exports = {
1213
handleChallengeCreated: ChallengeCreatedHandler.handle,
1314
handleChallengePhaseWarning: ChallengePhaseWarningHandler.handle,
1415
handleChallenge: ChallengeHandler.handle,
16+
handleAutoPilot: AutoPilotHandler.handle,
1517
};

src/services/AutoPilotService.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Autopilot general handler service.
3+
*/
4+
5+
'use strict';
6+
7+
const joi = require('joi');
8+
const _ = require('lodash')
9+
const logger = require('../common/logger');
10+
const tcApiHelper = require('../common/tcApiHelper');
11+
12+
/**
13+
* Handle autopilot message
14+
* @param {Object} message the Kafka message
15+
* @param {Object} ruleSets
16+
* @returns {Array} the notifications
17+
*/
18+
function* handle(message, ruleSets) {
19+
20+
if ((message.payload.phaseTypeName === _.get(ruleSets, "phaseTypeName"))
21+
&& (message.payload.state === _.get(ruleSets, "state"))) {
22+
const challengeId = message.payload.projectId
23+
const usersInfo = yield tcApiHelper.getUsersInfoFromChallenge(challengeId)
24+
const filerOnRoles = _.get(ruleSets, "roles")
25+
const users = tcApiHelper.filterChallengeUsers(usersInfo, filerOnRoles)
26+
logger.info(`Successfully filetered ${users.length} users on rulesets ${JSON.stringify(filerOnRoles)} `)
27+
// notify users of message
28+
return yield tcApiHelper.notifyUsersOfMessage(users, message);
29+
}
30+
return {}
31+
}
32+
33+
handle.schema = {
34+
message: joi.object().keys({
35+
topic: joi.string().required(),
36+
originator: joi.string().required(),
37+
timestamp: joi.date().required(),
38+
'mime-type': joi.string().required(),
39+
payload: joi.object().keys({
40+
phaseTypeName: joi.string().required(),
41+
state: joi.string().required(),
42+
projectId: joi.number().integer().min(1)
43+
}).unknown(true).required(),
44+
}).required(),
45+
ruleSets: joi.object()
46+
}
47+
48+
// Exports
49+
module.exports = {
50+
handle,
51+
}
52+
53+
logger.buildService(module.exports);

0 commit comments

Comments
 (0)