@@ -11,7 +11,7 @@ const _ = require('lodash')
11
11
const logger = require ( '../../util/logger' )
12
12
const challengeService = require ( '../../services/challengeService' )
13
13
const { getESClient } = require ( '../../util/helper' )
14
- const { getEffortHoursFromIfx } = require ( '../../services/challengeInformixService' )
14
+ const { execQuery , getEffortHoursFromIfx } = require ( '../../services/challengeInformixService' )
15
15
16
16
const mapping = {
17
17
effortHoursEstimate : 88 ,
@@ -28,26 +28,41 @@ const migrationFunction = {
28
28
29
29
while ( ! finish ) {
30
30
logger . info ( `Batch-${ batch } - Loading challenges` )
31
- const challenges = await getChallengesMissingData ( page , perPage )
32
- logger . info ( `Found ${ challenges . length } challenges` )
33
- if ( challenges . length > 0 ) {
34
- for ( const challenge of challenges ) {
31
+ const legacyIdRows = await getEffortHoursChallengeIds ( page , perPage )
32
+ logger . info ( `Found ${ legacyIdRows . length } legacy challenge ids` )
33
+ if ( legacyIdRows . length > 0 ) {
34
+ for ( const legacyIdRow of legacyIdRows ) {
35
+ const [ challenge ] = await challengeService . getChallengeFromV5API ( legacyIdRow . legacy_id )
36
+ if ( ! challenge ) {
37
+ logger . error ( `Challenge not found ${ legacyIdRow . legacy_id } ` )
38
+ continue
39
+ }
35
40
challenge . legacy . migration = 10
36
- const legacyData = await getEffortHoursFromIfx ( challenge . legacyId )
41
+ const legacyData = await getEffortHoursFromIfx ( legacyIdRow . legacy_id )
42
+ // logger.debug(`Legacy Data: ${JSON.stringify(legacyData)}`)
37
43
if ( legacyData . length > 0 ) {
38
- _ . keys ( mapping , ( key ) => {
44
+ _ . forEach ( mapping , ( mappingValue , key ) => {
45
+ // logger.debug(`${JSON.stringify(mappingValue)} -> ${key}`)
39
46
const v5Index = _ . findIndex ( challenge . metadata , meta => meta . name === key )
40
- const legacyIndex = _ . findIndex ( legacyData , entry => entry . project_info_type_id === mapping [ key ] )
41
- if ( v5Index === - 1 ) {
42
- challenge . metadata . push ( {
43
- name : key ,
44
- value : legacyData [ legacyIndex ] . value
45
- } )
47
+ const legacyIndex = _ . findIndex ( legacyData , entry => entry . project_info_type_id === mappingValue )
48
+ if ( legacyIndex > - 1 ) {
49
+ if ( v5Index === - 1 ) {
50
+ const newData = {
51
+ name : key ,
52
+ value : legacyData [ legacyIndex ] . value
53
+ }
54
+ // logger.debug(`Not found in v5, adding ${JSON.stringify(newData)}`)
55
+ challenge . metadata . push ( newData )
56
+ } else {
57
+ challenge . metadata [ v5Index ] . value = legacyData [ legacyIndex ] . value
58
+ // logger.debug(`Metadata found in v5, updating v5 index: ${v5Index} ${legacyIndex} V5 Metadata ${JSON.stringify(challenge.metadata[v5Index])} -- Legacy Data ${JSON.stringify(legacyData[legacyIndex])}`)
59
+ }
46
60
} else {
47
- challenge . metadata [ v5Index ] . value = legacyData [ legacyIndex ] . value
61
+ // logger.debug(`Key ${key} not found in legacy array`)
48
62
}
49
63
} )
50
- await challengeService . save ( challenge )
64
+ logger . debug ( `Writing Challenge ${ JSON . stringify ( challenge ) } ` )
65
+ // await challengeService.save(challenge)
51
66
}
52
67
}
53
68
} else {
@@ -59,38 +74,25 @@ const migrationFunction = {
59
74
}
60
75
}
61
76
62
- async function getChallengesMissingData ( page = 0 , perPage = 10 ) {
63
- const esQuery = {
64
- index : config . get ( 'ES.CHALLENGE_ES_INDEX' ) ,
65
- type : config . get ( 'ES.CHALLENGE_ES_TYPE' ) ,
66
- size : perPage ,
67
- from : page * perPage ,
68
- body : {
69
- query : {
70
- range : {
71
- 'legacy.migration' : {
72
- lt : 10
73
- }
74
- }
75
- }
76
- }
77
- }
78
- // logger.debug(`ES Query ${JSON.stringify(esQuery)}`)
79
- // Search with constructed query
80
- let docs
81
- try {
82
- docs = await getESClient ( ) . search ( esQuery )
83
- } catch ( e ) {
84
- // Catch error when the ES is fresh and has no data
85
- docs = {
86
- hits : {
87
- total : 0 ,
88
- hits : [ ]
89
- }
90
- }
77
+ /**
78
+ * Get effort hours for a legacyId
79
+ * @param {Number } legacyId the legacy ID
80
+ */
81
+ async function getEffortHoursChallengeIds ( page , perPage ) {
82
+ let limitOffset = `first ${ perPage } `
83
+ if ( page > 0 ) {
84
+ limitOffset = `skip ${ ( page * perPage ) } ${ limitOffset } `
91
85
}
92
- // Extract data from hits
93
- return _ . map ( docs . hits . hits , item => ( item . _source ) )
86
+
87
+ logger . debug ( `getEffortHoursChallengeIds ${ page } ${ perPage } ` )
88
+ const sql = `SELECT
89
+ ${ limitOffset }
90
+ DISTINCT project_id as legacy_id
91
+ FROM project_info
92
+ WHERE project_info_type_id in (88, 89, 90)
93
+ `
94
+ logger . info ( `Effort Hours SQL: ${ sql } ` )
95
+ return execQuery ( sql )
94
96
}
95
97
96
98
module . exports = migrationFunction
0 commit comments