@@ -120,7 +120,7 @@ async function getLegacyTrackInformation (trackId, typeId, tags, m2mToken) {
120
120
* @param {Object } payload the Kafka message payload
121
121
* @param {String } m2mToken the m2m token
122
122
* @param {Boolean } isCreated flag indicate the DTO is used in creating challenge
123
- * @param {Object } existingV4Challenge the existing V4 challenge
123
+ * @param {Object } existingV4Challenge the existing V4 challenge from ES
124
124
* @returns the DTO for saving a draft contest.(refer SaveDraftContestDTO in ap-challenge-microservice)
125
125
*/
126
126
async function parsePayload ( payload , m2mToken , isCreated = true , existingV4Challenge ) {
@@ -374,6 +374,9 @@ async function processUpdate (message) {
374
374
try {
375
375
// ensure challenge existed
376
376
challenge = await getChallengeById ( m2mToken , message . payload . legacyId )
377
+ if ( ! challenge ) {
378
+ throw new Error ( `Could not find challenge ${ message . payload . legacyId } ` )
379
+ }
377
380
} catch ( e ) {
378
381
// postponne kafka event
379
382
logger . info ( 'Challenge does not exist yet. Will post the same message back to the bus API' )
@@ -386,13 +389,46 @@ async function processUpdate (message) {
386
389
return
387
390
}
388
391
389
- const saveDraftContestDTO = await parsePayload ( message . payload , m2mToken , false , challenge )
390
- logger . debug ( 'Parsed Payload' , saveDraftContestDTO )
392
+ let challengeV4FromEs
391
393
try {
392
- if ( ! challenge ) {
393
- throw new Error ( `Could not find challenge ${ message . payload . legacyId } ` )
394
+ // Search with constructed query
395
+ const esQuery = {
396
+ index : config . get ( 'ES.ES_INDEX' ) ,
397
+ type : config . get ( 'ES.ES_TYPE' ) ,
398
+ size : 1 ,
399
+ from : 0 ,
400
+ body : {
401
+ query : {
402
+ match_phrase : {
403
+ _id : message . payload . legacyId
404
+ }
405
+ }
406
+ }
394
407
}
408
+ const docs = await helper . getESClient ( ) . search ( esQuery )
409
+ // Extract data from hits
410
+ if ( docs . hits . total === 0 ) {
411
+ throw new Error ( 'Challenge does not exist yet on ES' )
412
+ }
413
+ challengeV4FromEs = _ . map ( docs . hits . hits , item => item . _source ) [ 0 ]
414
+ if ( ! challengeV4FromEs ) {
415
+ throw new Error ( `Could not find challenge ${ message . payload . legacyId } on ES` )
416
+ }
417
+ } catch ( e ) {
418
+ // postponne kafka event
419
+ logger . info ( 'Challenge does not exist yet on ES. Will post the same message back to the bus API' )
420
+ await new Promise ( ( resolve ) => {
421
+ setTimeout ( async ( ) => {
422
+ await helper . postBusEvent ( config . UPDATE_CHALLENGE_TOPIC , message . payload )
423
+ resolve ( )
424
+ } , config . RETRY_TIMEOUT )
425
+ } )
426
+ return
427
+ }
395
428
429
+ const saveDraftContestDTO = await parsePayload ( message . payload , m2mToken , false , challengeV4FromEs )
430
+ logger . debug ( 'Parsed Payload' , saveDraftContestDTO )
431
+ try {
396
432
await helper . putRequest ( `${ config . V4_CHALLENGE_API_URL } /${ message . payload . legacyId } ` , { param : _ . omit ( saveDraftContestDTO , [ 'groupsToBeAdded' , 'groupsToBeDeleted' ] ) } , m2mToken )
397
433
await associateChallengeGroups ( saveDraftContestDTO . groupsToBeAdded , saveDraftContestDTO . groupsToBeDeleted , message . payload . legacyId )
398
434
0 commit comments