@@ -16,6 +16,8 @@ const copilotPaymentService = require('./copilotPaymentService')
16
16
const timelineService = require ( './timelineService' )
17
17
const metadataService = require ( './metadataService' )
18
18
const paymentService = require ( './paymentService' )
19
+ const { createOrSetNumberOfReviewers } = require ( './selfServiceReviewerService' )
20
+ const { disableTimelineNotifications } = require ( './selfServiceNotificationService' )
19
21
20
22
/**
21
23
* Drop and recreate phases in ifx
@@ -68,8 +70,10 @@ async function recreatePhases (legacyId, v5Phases, createdBy) {
68
70
* Sync the information from the v5 phases into legacy
69
71
* @param {Number } legacyId the legacy challenge ID
70
72
* @param {Array } v5Phases the v5 phases
73
+ * @param {Boolean } isSelfService is the challenge self-service
74
+ * @param {String } createdBy the created by
71
75
*/
72
- async function syncChallengePhases ( legacyId , v5Phases ) {
76
+ async function syncChallengePhases ( legacyId , v5Phases , createdBy , isSelfService ) {
73
77
const phaseTypes = await timelineService . getPhaseTypes ( )
74
78
const phasesFromIFx = await timelineService . getChallengePhases ( legacyId )
75
79
logger . debug ( `Phases from v5: ${ JSON . stringify ( v5Phases ) } ` )
@@ -104,6 +108,10 @@ async function syncChallengePhases (legacyId, v5Phases) {
104
108
} else {
105
109
logger . info ( `No v5 Equivalent Found for ${ phaseName } ` )
106
110
}
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
+ }
107
115
}
108
116
// TODO: What about iterative reviews? There can be many for the same challenge.
109
117
// TODO: handle timeline template updates
@@ -216,10 +224,10 @@ async function associateChallengeTerms (v5Terms, legacyChallengeId, createdBy, u
216
224
const standardTerms = _ . find ( v5Terms , e => e . id === config . V5_TERMS_STANDARD_ID )
217
225
const legacyStandardTerms = _ . find ( legacyTermsArray , e => _ . toNumber ( e . id ) === _ . toNumber ( config . LEGACY_TERMS_STANDARD_ID ) )
218
226
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 ) } ` )
223
231
224
232
const m2mToken = await helper . getM2MToken ( )
225
233
if ( standardTerms && standardTerms . id && ! legacyStandardTerms ) {
@@ -254,21 +262,17 @@ async function associateChallengeTerms (v5Terms, legacyChallengeId, createdBy, u
254
262
*/
255
263
async function setCopilotPayment ( challengeId , legacyChallengeId , prizeSets = [ ] , createdBy , updatedBy , m2mToken ) {
256
264
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
271
272
}
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 )
272
276
} catch ( e ) {
273
277
logger . error ( 'Failed to set the copilot payment!' )
274
278
logger . debug ( e )
@@ -376,7 +380,7 @@ async function parsePayload (payload, m2mToken) {
376
380
name : payload . name ,
377
381
reviewType : _ . get ( payload , 'legacy.reviewType' , 'INTERNAL' ) ,
378
382
projectId,
379
- status : payload . status
383
+ status : payload . status === constants . challengeStatuses . CancelledPaymentFailed ? constants . challengeStatuses . CancelledFailedScreening : payload . status
380
384
}
381
385
if ( payload . billingAccountId ) {
382
386
data . billingAccountId = payload . billingAccountId
@@ -601,6 +605,7 @@ async function createChallenge (saveDraftContestDTO, challengeUuid, createdByUse
601
605
// Repost all challenge resource on Kafka so they will get created on legacy by the legacy-challenge-resource-processor
602
606
await rePostResourcesOnKafka ( challengeUuid , m2mToken )
603
607
await timelineService . enableTimelineNotifications ( legacyId , createdByUserId )
608
+ await metadataService . createOrUpdateMetadata ( legacyId , 9 , 'On' , createdByUserId ) // autopilot
604
609
return legacyId
605
610
}
606
611
@@ -609,8 +614,8 @@ async function createChallenge (saveDraftContestDTO, challengeUuid, createdByUse
609
614
* @param {Object } message the kafka message
610
615
*/
611
616
async 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...` )
614
619
return
615
620
}
616
621
@@ -619,6 +624,11 @@ async function processMessage (message) {
619
624
return
620
625
}
621
626
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
+
622
632
logger . info ( `Processing Kafka Message: ${ JSON . stringify ( message ) } ` )
623
633
624
634
const createdByUserHandle = _ . get ( message , 'payload.createdBy' )
@@ -640,6 +650,9 @@ async function processMessage (message) {
640
650
logger . debug ( 'Legacy ID does not exist. Will create...' )
641
651
legacyId = await createChallenge ( saveDraftContestDTO , challengeUuid , createdByUserId , message . payload . legacy , m2mToken )
642
652
await recreatePhases ( legacyId , message . payload . phases , updatedByUserId )
653
+ if ( _ . get ( message , 'payload.legacy.selfService' ) ) {
654
+ await disableTimelineNotifications ( legacyId , createdByUserId ) // disable
655
+ }
643
656
}
644
657
645
658
let challenge
@@ -676,6 +689,8 @@ async function processMessage (message) {
676
689
logger . info ( 'Activating challenge...' )
677
690
const activated = await activateChallenge ( legacyId )
678
691
logger . info ( `Activated! ${ JSON . stringify ( activated ) } ` )
692
+ // make sure autopilot is on
693
+ await metadataService . createOrUpdateMetadata ( legacyId , 9 , 'On' , createdByUserId ) // autopilot
679
694
// Repost all challenge resource on Kafka so they will get created on legacy by the legacy-challenge-resource-processor
680
695
await rePostResourcesOnKafka ( challengeUuid , m2mToken )
681
696
}
@@ -694,7 +709,7 @@ async function processMessage (message) {
694
709
}
695
710
696
711
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 )
698
713
} else {
699
714
logger . info ( 'Will skip syncing phases as the challenge is a task...' )
700
715
}
@@ -720,7 +735,8 @@ processMessage.schema = {
720
735
reviewType : Joi . string ( ) . required ( ) ,
721
736
confidentialityType : Joi . string ( ) ,
722
737
directProjectId : Joi . number ( ) ,
723
- forumId : Joi . number ( ) . integer ( ) . positive ( )
738
+ forumId : Joi . number ( ) . integer ( ) . positive ( ) ,
739
+ selfService : Joi . boolean ( )
724
740
} ) . unknown ( true ) ,
725
741
task : Joi . object ( ) . keys ( {
726
742
isTask : Joi . boolean ( ) . default ( false ) ,
0 commit comments