From cf094f165bd5b1fa6d877125192f77b50e183f08 Mon Sep 17 00:00:00 2001 From: Thomas Kranitsas Date: Wed, 10 Mar 2021 13:08:29 +0200 Subject: [PATCH] Replace created/udpated with user IDs --- config/default.js | 1 + src/common/helper.js | 31 ++++++++++++++++++++++++++++++- src/services/ProcessorService.js | 17 +++++++++++------ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/config/default.js b/config/default.js index ddca4ad..eeddc18 100644 --- a/config/default.js +++ b/config/default.js @@ -60,6 +60,7 @@ module.exports = { V5_PROJECTS_API_URL: process.env.V5_PROJECTS_API_URL || 'https://api.topcoder-dev.com/v5/projects', V5_CHALLENGE_MIGRATION_API_URL: process.env.V5_CHALLENGE_MIGRATION_API_URL || 'https://api.topcoder-dev.com/v5/challenge-migration', V4_ES_FEEDER_API_URL: process.env.V4_ES_FEEDER_API_URL || 'https://api.topcoder-dev.com/v4/esfeeder/challenges', + MEMBER_API_URL: process.env.MEMBER_API_URL || 'https://api.topcoder-dev.com/v5/members', V5_GROUPS_API_URL: process.env.V5_GROUPS_API_URL || 'https://api.topcoder-dev.com/v5/groups', diff --git a/src/common/helper.js b/src/common/helper.js index 3b8d1f5..281a377 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -162,6 +162,34 @@ async function forceV4ESFeeder (legacyId) { await request.put(`${config.V4_ES_FEEDER_API_URL}`).send(body).set({ Authorization: `Bearer ${token}` }) } +/** + * Get the member ID by handle + * @param {String} handle the handle + */ +async function getMemberIdByHandle (handle) { + const m2mToken = await getM2MToken() + let memberId + try { + const res = await getRequest(`${config.MEMBER_API_URL}/${handle}`, m2mToken) + if (_.get(res, 'body.userId')) { + memberId = res.body.userId + } + // handle return from v3 API, handle and memberHandle are the same under case-insensitive condition + handle = _.get(res, 'body.handle') + } catch (error) { + // re-throw all error except 404 Not-Founded, BadRequestError should be thrown if 404 occurs + if (error.status !== 404) { + throw error + } + } + + if (_.isUndefined(memberId)) { + throw new Error(`User with handle: ${handle} doesn't exist`) + } + + return memberId +} + module.exports = { getInformixConnection, getKafkaOptions, @@ -171,5 +199,6 @@ module.exports = { putRequest, postRequest, postBusEvent, - forceV4ESFeeder + forceV4ESFeeder, + getMemberIdByHandle } diff --git a/src/services/ProcessorService.js b/src/services/ProcessorService.js index 47d6a30..f9b9e3f 100644 --- a/src/services/ProcessorService.js +++ b/src/services/ProcessorService.js @@ -559,6 +559,8 @@ async function processCreate (message) { logger.debug('Parsed Payload', saveDraftContestDTO) const challengeUuid = message.payload.id + const createdByUserId = await helper.getMemberIdByHandle(_.get(message, 'payload.createdBy')) + logger.debug('processCreate :: beforeTry') try { logger.info(`processCreate :: Skip Forums - ${config.V4_CHALLENGE_API_URL}?filter=skipForum=true body: ${JSON.stringify({ param: _.omit(saveDraftContestDTO, ['groupsToBeAdded', 'groupsToBeDeleted']) })}`) @@ -586,7 +588,7 @@ async function processCreate (message) { }, m2mToken) // Repost all challenge resource on Kafka so they will get created on legacy by the legacy-challenge-resource-processor await rePostResourcesOnKafka(challengeUuid, m2mToken) - await timelineService.enableTimelineNotifications(legacyId, _.get(message, 'payload.createdBy')) + await timelineService.enableTimelineNotifications(legacyId, createdByUserId) logger.debug('End of processCreate') return legacyId } catch (e) { @@ -651,6 +653,9 @@ async function processUpdate (message) { return } + const createdByUserId = await helper.getMemberIdByHandle(_.get(message, 'payload.createdBy')) + const updatedByUserId = await helper.getMemberIdByHandle(_.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy')) + let legacyId = message.payload.legacyId if (message.payload.status === constants.challengeStatuses.New) { logger.debug(`Will skip creating on legacy as status is ${constants.challengeStatuses.New}`) @@ -658,7 +663,7 @@ async function processUpdate (message) { } else if (!legacyId) { logger.debug('Legacy ID does not exist. Will create...') legacyId = await processCreate(message) - await recreatePhases(legacyId, message.payload.phases, _.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy')) + await recreatePhases(legacyId, message.payload.phases, updatedByUserId) } const m2mToken = await helper.getM2MToken() @@ -706,7 +711,7 @@ async function processUpdate (message) { metaValue = constants.supportedMetadata[metadataKey].method(message.payload, constants.supportedMetadata[metadataKey].defaultValue) if (metaValue !== null && metaValue !== '') { logger.info(`Setting ${constants.supportedMetadata[metadataKey].description} to ${metaValue}`) - await metadataService.createOrUpdateMetadata(legacyId, metadataKey, metaValue, _.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy')) + await metadataService.createOrUpdateMetadata(legacyId, metadataKey, metaValue, updatedByUserId) } } catch (e) { logger.warn(`Failed to set ${constants.supportedMetadata[metadataKey].description} to ${metaValue}`) @@ -750,10 +755,10 @@ async function processUpdate (message) { } else { logger.info('Will skip syncing phases as the challenge is a task...') } - await updateMemberPayments(legacyId, message.payload.prizeSets, _.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy')) + await updateMemberPayments(legacyId, message.payload.prizeSets, updatedByUserId) await associateChallengeGroups(saveDraftContestDTO.groupsToBeAdded, saveDraftContestDTO.groupsToBeDeleted, legacyId) - await associateChallengeTerms(message.payload.terms, legacyId, _.get(message, 'payload.createdBy'), _.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy')) - await setCopilotPayment(message.payload.id, legacyId, _.get(message, 'payload.prizeSets'), _.get(message, 'payload.createdBy'), _.get(message, 'payload.updatedBy') || _.get(message, 'payload.createdBy'), m2mToken) + await associateChallengeTerms(message.payload.terms, legacyId, createdByUserId, updatedByUserId) + await setCopilotPayment(message.payload.id, legacyId, _.get(message, 'payload.prizeSets'), createdByUserId, updatedByUserId, m2mToken) try { await helper.forceV4ESFeeder(legacyId)