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

Commit 90e9d18

Browse files
Support cancelling a challenge
1 parent 9374ada commit 90e9d18

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

src/services/ProcessorService.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const metadataService = require('./metadataService')
1818
const paymentService = require('./paymentService')
1919
const { createOrSetNumberOfReviewers } = require('./selfServiceReviewerService')
2020
const { disableTimelineNotifications } = require('./selfServiceNotificationService')
21+
const legacyChallengeService = require('./legacyChallengeService')
2122

2223
/**
2324
* Drop and recreate phases in ifx
@@ -656,7 +657,6 @@ async function processMessage (message) {
656657
if (_.get(message, 'payload.legacy.selfService')) {
657658
await disableTimelineNotifications(legacyId, createdByUserId) // disable
658659
}
659-
660660
}
661661

662662
logger.debug('Result from parsePayload:')
@@ -734,6 +734,11 @@ async function processMessage (message) {
734734
} else {
735735
logger.info('Will skip syncing phases as the challenge is a task...')
736736
}
737+
if (message.payload.status === constants.challengeStatuses.CancelledClientRequest && challenge.currentStatus !== constants.challengeStatuses.CancelledClientRequest) {
738+
logger.info('Cancelling challenge...')
739+
await legacyChallengeService.cancelChallenge(legacyId, updatedByUserId)
740+
needSyncV4ES = true
741+
}
737742
if (needSyncV4ES) {
738743
try {
739744
logger.info(`Resync V4 ES for the legacy challenge ${legacyId}`)
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* Legacy Challenge Service
3+
* Interacts with InformixDB
4+
*/
5+
const logger = require('../common/logger')
6+
const util = require('util')
7+
const helper = require('../common/helper')
8+
const { createChallengeStatusesMap } = require('../constants')
9+
10+
const QUERY_UPDATE_PROJECT = 'UPDATE project SET project_status_id = ?, modify_user = ? WHERE project_id = %d'
11+
12+
/**
13+
* Prepare Informix statement
14+
* @param {Object} connection the Informix connection
15+
* @param {String} sql the sql
16+
* @return {Object} Informix statement
17+
*/
18+
async function prepare (connection, sql) {
19+
// logger.debug(`Preparing SQL ${sql}`)
20+
const stmt = await connection.prepareAsync(sql)
21+
return Promise.promisifyAll(stmt)
22+
}
23+
24+
/**
25+
* Update a challenge in IFX
26+
* @param {Number} challengeLegacyId the legacy challenge ID
27+
* @param {Number} createdBy the creator user ID
28+
*/
29+
async function cancelChallenge (challengeLegacyId, createdBy) {
30+
const connection = await helper.getInformixConnection()
31+
let result = null
32+
try {
33+
await connection.beginTransactionAsync()
34+
const query = await prepare(connection, util.format(QUERY_UPDATE_PROJECT, challengeLegacyId))
35+
result = await query.executeAsync([createChallengeStatusesMap.CancelledClientRequest, createdBy])
36+
await connection.commitTransactionAsync()
37+
} catch (e) {
38+
logger.error(`Error in 'cancelChallenge' ${e}, rolling back transaction`)
39+
await connection.rollbackTransactionAsync()
40+
throw e
41+
} finally {
42+
logger.info(`Challenge ${challengeLegacyId} has been cancelled`)
43+
await connection.closeAsync()
44+
}
45+
return result
46+
}
47+
48+
module.exports = {
49+
cancelChallenge
50+
}

0 commit comments

Comments
 (0)