Skip to content

Commit 250b005

Browse files
authored
Merge pull request #716 from topcoder-platform/feature/tsjr-313-generate-tcUserId-for-existing-job_candidates
[DEV] process remaining uuids that failed first time
2 parents 6c58575 + aded59c commit 250b005

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
const models = require('../src/models')
2+
const tcUserId = require('./common/tcUserId')
3+
const Sequelize = require('sequelize')
4+
const _ = require('lodash')
5+
const helper = require('../src/common/helper')
6+
7+
// read cli arguments, pass the table name
8+
const tableName = process.argv[2]
9+
// read cli arguments, pass the column names to update
10+
const columnNames = process.argv[3]
11+
12+
const processRemainingUUIDs = async (tableName, columnNames) => {
13+
const dbUrl = process.env.UBAHN_DB_URL
14+
const MODE = process.env.MODE || 'test'
15+
16+
if (_.isUndefined(dbUrl) || _.isNull(dbUrl)) {
17+
console.log('Ubahn DB URL not set, exiting!')
18+
process.exit(0)
19+
}
20+
21+
for (const columnName of _.split(columnNames, ',')) {
22+
const query = `SELECT DISTINCT ${columnName} FROM bookings.${tableName} WHERE LENGTH(${columnName}) > 9 AND ${columnName} <> '00000000-0000-0000-0000-000000000000';`
23+
let results = await models.sequelize.query(query, { type: Sequelize.QueryTypes.SELECT })
24+
25+
if (results.length > 0) {
26+
results = _.uniq(_.map(_.filter(results, val => toString(val[`${columnName}`]).length > 9), val => val[`${columnName}`]))
27+
console.log(`result: ${JSON.stringify(results)}`)
28+
29+
const ubahnConn = await tcUserId.getUbahnDatabaseConnection(dbUrl)
30+
const uuidToHandleMap = await tcUserId.getUserUbahnUUIDToHandleMap(ubahnConn, results)
31+
32+
const handleToIDMap = {}
33+
const batches = _.chunk(Object.values(uuidToHandleMap), 30)
34+
for (const batch of batches) {
35+
const memberAPIRes = await helper.getMemberDetailsByHandles(batch)
36+
_.forEach(memberAPIRes, member => {
37+
handleToIDMap[member.handleLower] = member.userId
38+
})
39+
}
40+
41+
let sql = ''
42+
for (const [key, value] of Object.entries(uuidToHandleMap)) {
43+
if (!_.isUndefined(handleToIDMap[value.toLowerCase()])) {
44+
sql += `UPDATE bookings.${tableName} SET ${columnName} = '${handleToIDMap[value.toLowerCase()]}' WHERE ${columnName} = '${key}';`
45+
}
46+
}
47+
console.log(`UPDATE statements: ${sql}`)
48+
if (MODE !== test) {
49+
await models.sequelize.query(sql, { type: Sequelize.QueryTypes.UPDATE })
50+
}
51+
} else {
52+
console.log(`No data eligible to be updated for table: ${tableName} against column ${columnName}`)
53+
}
54+
}
55+
}
56+
57+
processRemainingUUIDs(tableName, columnNames).then(res => {
58+
console.log(`Processed remaining records for model '${tableName}' against columns: ${columnNames}`)
59+
process.exit(0)
60+
}).catch(err => {
61+
console.error(`${JSON.stringify(err)}`)
62+
process.exit(1)
63+
})

0 commit comments

Comments
 (0)