@@ -16,6 +16,8 @@ const copilotPaymentService = require('./copilotPaymentService')
1616const timelineService = require ( './timelineService' )
1717const metadataService = require ( './metadataService' )
1818const paymentService = require ( './paymentService' )
19+ const { createOrSetNumberOfReviewers } = require ( './selfServiceReviewerService' )
20+ const { disableTimelineNotifications } = require ( './selfServiceNotificationService' )
1921
2022/**
2123 * Drop and recreate phases in ifx
@@ -68,8 +70,10 @@ async function recreatePhases (legacyId, v5Phases, createdBy) {
6870 * Sync the information from the v5 phases into legacy
6971 * @param {Number } legacyId the legacy challenge ID
7072 * @param {Array } v5Phases the v5 phases
73+ * @param {Boolean } isSelfService is the challenge self-service
74+ * @param {String } createdBy the created by
7175 */
72- async function syncChallengePhases ( legacyId , v5Phases ) {
76+ async function syncChallengePhases ( legacyId , v5Phases , createdBy , isSelfService ) {
7377 const phaseTypes = await timelineService . getPhaseTypes ( )
7478 const phasesFromIFx = await timelineService . getChallengePhases ( legacyId )
7579 logger . debug ( `Phases from v5: ${ JSON . stringify ( v5Phases ) } ` )
@@ -104,6 +108,10 @@ async function syncChallengePhases (legacyId, v5Phases) {
104108 } else {
105109 logger . info ( `No v5 Equivalent Found for ${ phaseName } ` )
106110 }
111+ if ( isSelfService && phaseName === 'Review' ) {
112+ // make sure to set the required reviewers to 2
113+ await createOrSetNumberOfReviewers ( phase . project_phase_id , 2 , createdBy )
114+ }
107115 }
108116 // TODO: What about iterative reviews? There can be many for the same challenge.
109117 // TODO: handle timeline template updates
@@ -216,10 +224,10 @@ async function associateChallengeTerms (v5Terms, legacyChallengeId, createdBy, u
216224 const standardTerms = _ . find ( v5Terms , e => e . id === config . V5_TERMS_STANDARD_ID )
217225 const legacyStandardTerms = _ . find ( legacyTermsArray , e => _ . toNumber ( e . id ) === _ . toNumber ( config . LEGACY_TERMS_STANDARD_ID ) )
218226
219- // logger.debug(`NDA: ${config.V5_TERMS_NDA_ID} - ${JSON.stringify(nda)}`)
220- // logger.debug(`Standard Terms: ${config.V5_TERMS_STANDARD_ID} - ${JSON.stringify(standardTerms)}`)
221- // logger.debug(`Legacy NDA: ${JSON.stringify(legacyNDA)}`)
222- // logger.debug(`Legacy Standard Terms: ${JSON.stringify(legacyStandardTerms)}`)
227+ logger . debug ( `NDA: ${ config . V5_TERMS_NDA_ID } - ${ JSON . stringify ( nda ) } ` )
228+ logger . debug ( `Standard Terms: ${ config . V5_TERMS_STANDARD_ID } - ${ JSON . stringify ( standardTerms ) } ` )
229+ logger . debug ( `Legacy NDA: ${ JSON . stringify ( legacyNDA ) } ` )
230+ logger . debug ( `Legacy Standard Terms: ${ JSON . stringify ( legacyStandardTerms ) } ` )
223231
224232 const m2mToken = await helper . getM2MToken ( )
225233 if ( standardTerms && standardTerms . id && ! legacyStandardTerms ) {
@@ -254,21 +262,17 @@ async function associateChallengeTerms (v5Terms, legacyChallengeId, createdBy, u
254262 */
255263async function setCopilotPayment ( challengeId , legacyChallengeId , prizeSets = [ ] , createdBy , updatedBy , m2mToken ) {
256264 try {
257- const copilotPayment = _ . get ( _ . find ( prizeSets , p => p . type === config . COPILOT_PAYMENT_TYPE ) , 'prizes[0].value' , null )
258- if ( copilotPayment ) {
259- logger . debug ( 'Fetching challenge copilot...' )
260- const res = await helper . getRequest ( `${ config . V5_RESOURCES_API_URL } ?challengeId=${ challengeId } &roleId=${ config . COPILOT_ROLE_ID } ` , m2mToken )
261- const [ copilotResource ] = res . body
262- if ( ! copilotResource ) {
263- logger . warn ( `Copilot does not exist for challenge ${ challengeId } (legacy: ${ legacyChallengeId } )` )
264- return
265- }
266- logger . debug ( `Setting Copilot Payment: ${ copilotPayment } for legacyId ${ legacyChallengeId } for copilot ${ copilotResource . memberId } ` )
267- if ( copilotPayment !== null && copilotPayment >= 0 ) {
268- await copilotPaymentService . setManualCopilotPayment ( legacyChallengeId , createdBy , updatedBy )
269- }
270- await copilotPaymentService . setCopilotPayment ( legacyChallengeId , copilotPayment , createdBy , updatedBy )
265+ const copilotPayment = _ . get ( _ . find ( prizeSets , p => p . type === config . COPILOT_PAYMENT_TYPE ) , 'prizes[0].value' , 0 )
266+ logger . debug ( 'Fetching challenge copilot...' )
267+ const res = await helper . getRequest ( `${ config . V5_RESOURCES_API_URL } ?challengeId=${ challengeId } &roleId=${ config . COPILOT_ROLE_ID } ` , m2mToken )
268+ const [ copilotResource ] = res . body
269+ if ( ! copilotResource ) {
270+ logger . warn ( `Copilot does not exist for challenge ${ challengeId } (legacy: ${ legacyChallengeId } )` )
271+ return
271272 }
273+ logger . debug ( `Setting Copilot Payment: ${ copilotPayment } for legacyId ${ legacyChallengeId } for copilot ${ copilotResource . memberId } ` )
274+ await copilotPaymentService . setManualCopilotPayment ( legacyChallengeId , createdBy , updatedBy )
275+ await copilotPaymentService . setCopilotPayment ( legacyChallengeId , copilotPayment , createdBy , updatedBy )
272276 } catch ( e ) {
273277 logger . error ( 'Failed to set the copilot payment!' )
274278 logger . debug ( e )
@@ -376,7 +380,7 @@ async function parsePayload (payload, m2mToken) {
376380 name : payload . name ,
377381 reviewType : _ . get ( payload , 'legacy.reviewType' , 'INTERNAL' ) ,
378382 projectId,
379- status : payload . status
383+ status : payload . status === constants . challengeStatuses . CancelledPaymentFailed ? constants . challengeStatuses . CancelledFailedScreening : payload . status
380384 }
381385 if ( payload . billingAccountId ) {
382386 data . billingAccountId = payload . billingAccountId
@@ -601,6 +605,7 @@ async function createChallenge (saveDraftContestDTO, challengeUuid, createdByUse
601605 // Repost all challenge resource on Kafka so they will get created on legacy by the legacy-challenge-resource-processor
602606 await rePostResourcesOnKafka ( challengeUuid , m2mToken )
603607 await timelineService . enableTimelineNotifications ( legacyId , createdByUserId )
608+ await metadataService . createOrUpdateMetadata ( legacyId , 9 , 'On' , createdByUserId ) // autopilot
604609 return legacyId
605610}
606611
@@ -609,8 +614,8 @@ async function createChallenge (saveDraftContestDTO, challengeUuid, createdByUse
609614 * @param {Object } message the kafka message
610615 */
611616async function processMessage ( message ) {
612- if ( _ . get ( message , 'payload.legacy.pureV5Task' ) ) {
613- logger . debug ( `Challenge ${ message . payload . id } is a pure v5 task. Will skip...` )
617+ if ( _ . get ( message , 'payload.legacy.pureV5Task' ) || _ . get ( message , 'payload.legacy.pureV5' ) ) {
618+ logger . debug ( `Challenge ${ message . payload . id } is a pure v5 task or challenge . Will skip...` )
614619 return
615620 }
616621
@@ -619,6 +624,11 @@ async function processMessage (message) {
619624 return
620625 }
621626
627+ if ( message . payload . status === constants . challengeStatuses . Approved ) {
628+ logger . debug ( `Will skip updating on legacy as status is ${ constants . challengeStatuses . Approved } ` )
629+ return
630+ }
631+
622632 logger . info ( `Processing Kafka Message: ${ JSON . stringify ( message ) } ` )
623633
624634 const createdByUserHandle = _ . get ( message , 'payload.createdBy' )
@@ -640,6 +650,9 @@ async function processMessage (message) {
640650 logger . debug ( 'Legacy ID does not exist. Will create...' )
641651 legacyId = await createChallenge ( saveDraftContestDTO , challengeUuid , createdByUserId , message . payload . legacy , m2mToken )
642652 await recreatePhases ( legacyId , message . payload . phases , updatedByUserId )
653+ if ( _ . get ( message , 'payload.legacy.selfService' ) ) {
654+ await disableTimelineNotifications ( legacyId , createdByUserId ) // disable
655+ }
643656 }
644657
645658 let challenge
@@ -676,6 +689,8 @@ async function processMessage (message) {
676689 logger . info ( 'Activating challenge...' )
677690 const activated = await activateChallenge ( legacyId )
678691 logger . info ( `Activated! ${ JSON . stringify ( activated ) } ` )
692+ // make sure autopilot is on
693+ await metadataService . createOrUpdateMetadata ( legacyId , 9 , 'On' , createdByUserId ) // autopilot
679694 // Repost all challenge resource on Kafka so they will get created on legacy by the legacy-challenge-resource-processor
680695 await rePostResourcesOnKafka ( challengeUuid , m2mToken )
681696 }
@@ -694,7 +709,7 @@ async function processMessage (message) {
694709 }
695710
696711 if ( ! _ . get ( message . payload , 'task.isTask' ) ) {
697- await syncChallengePhases ( legacyId , message . payload . phases )
712+ await syncChallengePhases ( legacyId , message . payload . phases , _ . get ( message , 'payload.legacy.selfService' ) , createdByUserId )
698713 } else {
699714 logger . info ( 'Will skip syncing phases as the challenge is a task...' )
700715 }
@@ -720,7 +735,8 @@ processMessage.schema = {
720735 reviewType : Joi . string ( ) . required ( ) ,
721736 confidentialityType : Joi . string ( ) ,
722737 directProjectId : Joi . number ( ) ,
723- forumId : Joi . number ( ) . integer ( ) . positive ( )
738+ forumId : Joi . number ( ) . integer ( ) . positive ( ) ,
739+ selfService : Joi . boolean ( )
724740 } ) . unknown ( true ) ,
725741 task : Joi . object ( ) . keys ( {
726742 isTask : Joi . boolean ( ) . default ( false ) ,
0 commit comments