Skip to content

Commit f647c1f

Browse files
Merge pull request #372 from topcoder-platform/scheduling-api-changes
Support legacy.useSchedulingAPI
2 parents 3893a53 + c32424b commit f647c1f

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

config/default.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module.exports = {
2323
// bus API config params
2424
BUSAPI_URL: process.env.BUSAPI_URL || 'https://api.topcoder-dev.com/v5',
2525
KAFKA_ERROR_TOPIC: process.env.KAFKA_ERROR_TOPIC || 'common.error.reporting',
26+
SCHEDULING_TOPIC: process.env.SCHEDULING_TOPIC || 'challenge.notification.schedule.update',
2627

2728
AMAZON: {
2829
// AWS_ACCESS_KEY_ID: process.env.AWS_FAKE_ID || 'FAKE_ACCESS_KEY',

docs/swagger.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,11 @@ paths:
400400
Will be ignored for regular users or not authenticated users
401401
required: false
402402
type: string
403+
- name: useSchedulingAPI
404+
in: query
405+
description: Search based on `legacy.useSchedulingAPI`
406+
type: boolean
407+
required: false
403408
- in: body
404409
name: body
405410
required: false

src/services/ChallengeService.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ async function searchChallenges (currentUser, criteria) {
264264
})
265265
}
266266

267+
if (criteria.useSchedulingAPI) {
268+
boolQuery.push({ match_phrase: { 'legacy.useSchedulingAPI': criteria.useSchedulingAPI } })
269+
}
267270
if (criteria.forumId) {
268271
boolQuery.push({ match_phrase: { 'legacy.forumId': criteria.forumId } })
269272
}
@@ -673,7 +676,8 @@ searchChallenges.schema = {
673676
taskIsAssigned: Joi.boolean(),
674677
taskMemberId: Joi.string(),
675678
events: Joi.array().items(Joi.string()),
676-
includeAllEvents: Joi.boolean().default(true)
679+
includeAllEvents: Joi.boolean().default(true),
680+
useSchedulingAPI: Joi.boolean()
677681
}).unknown(true)
678682
}
679683

@@ -967,7 +971,8 @@ createChallenge.schema = {
967971
directProjectId: Joi.number().integer(),
968972
screeningScorecardId: Joi.number().integer(),
969973
reviewScorecardId: Joi.number().integer(),
970-
isTask: Joi.boolean()
974+
isTask: Joi.boolean(),
975+
useSchedulingAPI: Joi.boolean()
971976
}),
972977
task: Joi.object().keys({
973978
isTask: Joi.boolean().default(false),
@@ -1222,6 +1227,9 @@ async function update (currentUser, challengeId, data, isFull) {
12221227
if (_.get(challenge, 'typeId') && _.get(data, 'typeId') && _.get(challenge, 'typeId') !== _.get(data, 'typeId')) {
12231228
throw new errors.ForbiddenError('Cannot change typeId')
12241229
}
1230+
if (_.get(challenge, 'legacy.useSchedulingAPI') && _.get(data, 'legacy.useSchedulingAPI') && _.get(challenge, 'legacy.useSchedulingAPI') !== _.get(data, 'legacy.useSchedulingAPI')) {
1231+
throw new errors.ForbiddenError('Cannot change legacy.useSchedulingAPI')
1232+
}
12251233

12261234
if (!_.isUndefined(challenge.legacy) && !_.isUndefined(data.legacy)) {
12271235
_.extend(challenge.legacy, data.legacy)
@@ -1340,6 +1348,7 @@ async function update (currentUser, challengeId, data, isFull) {
13401348
data.updatedBy = currentUser.handle || currentUser.sub
13411349
const updateDetails = {}
13421350
const auditLogs = []
1351+
let phasesHaveBeenModified = false
13431352
_.each(data, (value, key) => {
13441353
let op
13451354
if (key === 'metadata') {
@@ -1349,6 +1358,7 @@ async function update (currentUser, challengeId, data, isFull) {
13491358
}
13501359
} else if (key === 'phases') {
13511360
if (isDifferentPhases(challenge[key], value)) {
1361+
phasesHaveBeenModified = true
13521362
logger.info('update phases')
13531363
op = '$PUT'
13541364
}
@@ -1590,7 +1600,9 @@ async function update (currentUser, challengeId, data, isFull) {
15901600
busEventPayload.billingAccountId = billingAccountId
15911601
}
15921602
await helper.postBusEvent(constants.Topics.ChallengeUpdated, busEventPayload)
1593-
1603+
if (phasesHaveBeenModified === true && _.get(challenge, 'legacy.useSchedulingAPI')) {
1604+
await helper.postBusEvent(config.SCHEDULING_TOPIC, { id: challengeId })
1605+
}
15941606
if (challenge.phases && challenge.phases.length > 0) {
15951607
challenge.currentPhase = challenge.phases.slice().reverse().find(phase => phase.isOpen)
15961608
challenge.endDate = helper.calculateChallengeEndDate(challenge)
@@ -1656,7 +1668,8 @@ function sanitizeChallenge (challenge) {
16561668
'directProjectId',
16571669
'screeningScorecardId',
16581670
'reviewScorecardId',
1659-
'isTask'
1671+
'isTask',
1672+
'useSchedulingAPI'
16601673
])
16611674
}
16621675
if (challenge.metadata) {
@@ -1711,7 +1724,8 @@ fullyUpdateChallenge.schema = {
17111724
directProjectId: Joi.number().integer(),
17121725
screeningScorecardId: Joi.number().integer(),
17131726
reviewScorecardId: Joi.number().integer(),
1714-
isTask: Joi.boolean()
1727+
isTask: Joi.boolean(),
1728+
useSchedulingAPI: Joi.boolean()
17151729
}).unknown(true),
17161730
task: Joi.object().keys({
17171731
isTask: Joi.boolean().default(false),
@@ -1806,7 +1820,8 @@ partiallyUpdateChallenge.schema = {
18061820
confidentialityType: Joi.string().default(config.DEFAULT_CONFIDENTIALITY_TYPE),
18071821
directProjectId: Joi.number(),
18081822
forumId: Joi.number().integer(),
1809-
isTask: Joi.boolean()
1823+
isTask: Joi.boolean(),
1824+
useSchedulingAPI: Joi.boolean()
18101825
}).unknown(true),
18111826
task: Joi.object().keys({
18121827
isTask: Joi.boolean().default(false),

0 commit comments

Comments
 (0)