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

Commit 78cdaf1

Browse files
set number of reviewers on self service challenges
1 parent 2d94829 commit 78cdaf1

File tree

2 files changed

+95
-3
lines changed

2 files changed

+95
-3
lines changed

src/services/ProcessorService.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const copilotPaymentService = require('./copilotPaymentService')
1616
const timelineService = require('./timelineService')
1717
const metadataService = require('./metadataService')
1818
const paymentService = require('./paymentService')
19+
const { createOrSetNumberOfReviewers } = require('./selfServiceReviewerService')
1920

2021
/**
2122
* Drop and recreate phases in ifx
@@ -68,8 +69,10 @@ async function recreatePhases (legacyId, v5Phases, createdBy) {
6869
* Sync the information from the v5 phases into legacy
6970
* @param {Number} legacyId the legacy challenge ID
7071
* @param {Array} v5Phases the v5 phases
72+
* @param {Boolean} isSelfService is the challenge self-service
73+
* @param {String} createdBy the created by
7174
*/
72-
async function syncChallengePhases (legacyId, v5Phases) {
75+
async function syncChallengePhases (legacyId, v5Phases, createdBy, isSelfService) {
7376
const phaseTypes = await timelineService.getPhaseTypes()
7477
const phasesFromIFx = await timelineService.getChallengePhases(legacyId)
7578
logger.debug(`Phases from v5: ${JSON.stringify(v5Phases)}`)
@@ -104,6 +107,10 @@ async function syncChallengePhases (legacyId, v5Phases) {
104107
} else {
105108
logger.info(`No v5 Equivalent Found for ${phaseName}`)
106109
}
110+
if (isSelfService && phaseName === 'Review') {
111+
// make sure to set the required reviewers to 2
112+
await createOrSetNumberOfReviewers(phase.project_phase_id, 2, createdBy)
113+
}
107114
}
108115
// TODO: What about iterative reviews? There can be many for the same challenge.
109116
// TODO: handle timeline template updates
@@ -695,7 +702,7 @@ async function processMessage (message) {
695702
}
696703

697704
if (!_.get(message.payload, 'task.isTask')) {
698-
await syncChallengePhases(legacyId, message.payload.phases)
705+
await syncChallengePhases(legacyId, message.payload.phases, _.get(message, 'payload.legacy.selfService'), createdByUserId)
699706
} else {
700707
logger.info('Will skip syncing phases as the challenge is a task...')
701708
}
@@ -721,7 +728,8 @@ processMessage.schema = {
721728
reviewType: Joi.string().required(),
722729
confidentialityType: Joi.string(),
723730
directProjectId: Joi.number(),
724-
forumId: Joi.number().integer().positive()
731+
forumId: Joi.number().integer().positive(),
732+
selfService: Joi.boolean()
725733
}).unknown(true),
726734
task: Joi.object().keys({
727735
isTask: Joi.boolean().default(false),
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* Number of reviewers Service
3+
* Interacts with InformixDB
4+
*/
5+
const util = require('util')
6+
const logger = require('../common/logger')
7+
const helper = require('../common/helper')
8+
9+
const QUERY_GET_ENTRY = 'SELECT parameter FROM phase_criteria WHERE project_phase_id = %d'
10+
const QUERY_CREATE = 'INSERT INTO phase_criteria (project_phase_id, phase_criteria_type_id, parameter, create_user, create_date, modify_user, modify_date) VALUES (?, 6, ?, ?, CURRENT, ?, CURRENT)'
11+
const QUERY_UPDATE = 'UPDATE phase_criteria SET parameter = ?, modify_user = ?, modify_date = CURRENT WHERE project_phase_id = ?'
12+
const QUERY_DELETE = 'DELETE FROM phase_criteria WHERE project_phase_id = ?'
13+
14+
/**
15+
* Prepare Informix statement
16+
* @param {Object} connection the Informix connection
17+
* @param {String} sql the sql
18+
* @return {Object} Informix statement
19+
*/
20+
async function prepare (connection, sql) {
21+
// logger.debug(`Preparing SQL ${sql}`)
22+
const stmt = await connection.prepareAsync(sql)
23+
return Promise.promisifyAll(stmt)
24+
}
25+
26+
/**
27+
* Get entry
28+
* @param {Number} phaseId the phase ID
29+
*/
30+
async function getEntry (phaseId) {
31+
// logger.debug(`Getting Groups for Challenge ${challengeLegacyId}`)
32+
const connection = await helper.getInformixConnection()
33+
let result = null
34+
try {
35+
result = await connection.queryAsync(util.format(QUERY_GET_ENTRY, phaseId))
36+
} catch (e) {
37+
logger.error(`Error in 'getEntry' ${e}`)
38+
throw e
39+
} finally {
40+
await connection.closeAsync()
41+
}
42+
return result
43+
}
44+
45+
/**
46+
* Enable timeline notifications
47+
* @param {Number} phaseId the legacy challenge ID
48+
* @param {Number} typeId the type ID
49+
* @param {Any} value the value
50+
* @param {String} createdBy the created by
51+
*/
52+
async function createOrSetNumberOfReviewers (phaseId, value, createdBy) {
53+
const connection = await helper.getInformixConnection()
54+
let result = null
55+
try {
56+
await connection.beginTransactionAsync()
57+
const [existing] = await getEntry(phaseId)
58+
if (existing) {
59+
if (value) {
60+
const query = await prepare(connection, QUERY_UPDATE)
61+
result = await query.executeAsync([value, createdBy, phaseId])
62+
} else {
63+
const query = await prepare(connection, QUERY_DELETE)
64+
result = await query.executeAsync([phaseId, value])
65+
}
66+
} else {
67+
const query = await prepare(connection, QUERY_CREATE)
68+
result = await query.executeAsync([phaseId, value, createdBy, createdBy])
69+
}
70+
await connection.commitTransactionAsync()
71+
} catch (e) {
72+
logger.error(`Error in 'createOrSetNumberOfReviewers' ${e}, rolling back transaction`)
73+
await connection.rollbackTransactionAsync()
74+
throw e
75+
} finally {
76+
await connection.closeAsync()
77+
}
78+
return result
79+
}
80+
81+
module.exports = {
82+
getEntry,
83+
createOrSetNumberOfReviewers
84+
}

0 commit comments

Comments
 (0)