@@ -46,18 +46,12 @@ async function processChallenge (legacyId, challengeListing, challengeDetails) {
46
46
const v5ChallengeObjectFromV4 = await challengeService . buildV5Challenge ( legacyId , challengeListing , challengeDetails )
47
47
const [ v5ChallengeFromAPI ] = await challengeService . getChallengeFromV5API ( legacyId )
48
48
49
- // omit properties that shouldn't be sync'd
50
- // TODO omit other properties?
51
- let challengeObj = _ . omit ( v5ChallengeObjectFromV4 , [ 'type' , 'track' , 'typeId' , 'trackId' ] )
52
-
53
- if ( challengeObj . descriptionFormat !== 'HTML' ) {
54
- challengeObj = _ . omit ( challengeObj , [ 'description' , 'privateDescription' ] )
55
- }
49
+ const additionalInformation = { }
56
50
57
51
// logger.info(`Before V5 Reg Sync: ${challengeObj.numOfRegistrants} ${v5ChallengeFromAPI.numOfRegistrants}`)
58
52
try {
59
53
const registrants = await resourceService . getResourcesFromV5API ( v5ChallengeFromAPI . id , config . SUBMITTER_ROLE_ID )
60
- challengeObj . numOfRegistrants = _ . toNumber ( registrants . total )
54
+ additionalInformation . numOfRegistrants = _ . toNumber ( registrants . total )
61
55
} catch ( e ) {
62
56
logger . error ( `Sync :: Failed to load resources for challenge ${ v5ChallengeFromAPI . id } ` )
63
57
logger . logFullError ( e )
@@ -66,7 +60,7 @@ async function processChallenge (legacyId, challengeListing, challengeDetails) {
66
60
// logger.info(`Before V5 Sub Sync: ${challengeObj.numOfSubmissions} ${v5ChallengeFromAPI.numOfSubmissions}`)
67
61
try {
68
62
const submissions = await challengeService . getChallengeSubmissionsFromV5API ( legacyId , config . SUBMISSION_TYPE )
69
- challengeObj . numOfSubmissions = _ . toNumber ( submissions . total ) || 0
63
+ additionalInformation . numOfSubmissions = _ . toNumber ( submissions . total ) || 0
70
64
} catch ( e ) {
71
65
logger . error ( `Sync :: Failed to load submissions for challenge ${ legacyId } ` )
72
66
logger . logFullError ( e )
@@ -75,15 +69,29 @@ async function processChallenge (legacyId, challengeListing, challengeDetails) {
75
69
if ( v5ChallengeObjectFromV4 . track . toUpperCase ( ) === V4_TRACKS . DESIGN ) {
76
70
try {
77
71
const submissions = await challengeService . getChallengeSubmissionsFromV5API ( legacyId , config . CHECKPOINT_SUBMISSION_TYPE )
78
- challengeObj . numOfCheckpointSubmissions = _ . toNumber ( submissions . total ) || 0
72
+ additionalInformation . numOfCheckpointSubmissions = _ . toNumber ( submissions . total ) || 0
79
73
} catch ( e ) {
80
74
logger . error ( `Sync :: Failed to load checkpoint submissions for challenge ${ legacyId } ` )
81
75
logger . logFullError ( e )
82
76
}
83
77
}
84
- challengeObj . id = v5ChallengeFromAPI . id
85
78
86
- return challengeService . save ( challengeObj )
79
+ const ommittedFields = [ [ 'id' , 'type' , 'track' , 'typeId' , 'trackId' , 'prizeSets' ] ]
80
+
81
+ if ( v5ChallengeObjectFromV4 . descriptionFormat !== 'HTML' ) {
82
+ ommittedFields . push ( 'description' )
83
+ ommittedFields . push ( 'privateDescription' )
84
+ }
85
+
86
+ return challengeService . save ( {
87
+ ..._ . omit ( v5ChallengeFromAPI , [ 'prizeSets' ] ) ,
88
+ ..._ . omit ( v5ChallengeObjectFromV4 , ommittedFields ) ,
89
+ prizeSets : [
90
+ ..._ . intersectionBy ( _ . get ( v5ChallengeObjectFromV4 , 'prizeSets' , [ ] ) . prizeSets , _ . get ( v5ChallengeFromAPI , 'prizeSets' , [ ] ) . prizeSets , 'type' ) ,
91
+ ..._ . differenceBy ( _ . get ( v5ChallengeFromAPI , 'prizeSets' , [ ] ) . prizeSets , _ . get ( v5ChallengeObjectFromV4 , 'prizeSets' , [ ] ) . prizeSets , 'type' )
92
+ ] ,
93
+ ...additionalInformation
94
+ } )
87
95
}
88
96
89
97
async function processResources ( legacyId , challengeId , force ) {
0 commit comments