Skip to content

Commit c9ecfa0

Browse files
authored
Merge pull request #717 from topcoder-platform/dev
Hotfix - userId as string
2 parents 77dfeb7 + db19927 commit c9ecfa0

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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+
24+
console.log(`Executing query in table ${tableName} against column ${columnName}`)
25+
console.log(`SQL query: ${query}`)
26+
27+
let results = await models.sequelize.query(query, { type: Sequelize.QueryTypes.SELECT })
28+
29+
if (results.length > 0) {
30+
results = _.uniq(_.map(_.filter(results, val => toString(val[`${columnName}`]).length > 9), val => val[`${columnName}`]))
31+
console.log(`SQL query result: ${JSON.stringify(results)}`)
32+
33+
const ubahnConn = await tcUserId.getUbahnDatabaseConnection(dbUrl)
34+
const uuidToHandleMap = await tcUserId.getUserUbahnUUIDToHandleMap(ubahnConn, results)
35+
36+
const handleToIDMap = {}
37+
const batches = _.chunk(Object.values(uuidToHandleMap), 30)
38+
for (const batch of batches) {
39+
console.log(`Batch of handles: ${JSON.stringify(batch)}`)
40+
const memberAPIRes = await helper.getMemberDetailsByHandles(batch)
41+
_.forEach(memberAPIRes, member => {
42+
handleToIDMap[member.handleLower] = member.userId
43+
})
44+
}
45+
46+
let sql = ''
47+
for (const [key, value] of Object.entries(uuidToHandleMap)) {
48+
if (!_.isUndefined(handleToIDMap[value.toLowerCase()])) {
49+
sql += `UPDATE bookings.${tableName} SET ${columnName} = '${handleToIDMap[value.toLowerCase()]}' WHERE ${columnName} = '${key}';`
50+
}
51+
}
52+
console.log(`SQL UPDATE statements: ${sql}`)
53+
if (MODE !== test && sql.length > 0) {
54+
await models.sequelize.query(sql, { type: Sequelize.QueryTypes.UPDATE })
55+
}
56+
} else {
57+
console.log(`No data eligible to be updated for table: ${tableName} against column ${columnName}`)
58+
}
59+
}
60+
}
61+
62+
processRemainingUUIDs(tableName, columnNames).then(res => {
63+
console.log(`Processed remaining records for model '${tableName}' against columns: ${columnNames}`)
64+
process.exit(0)
65+
}).catch(err => {
66+
console.error(`${JSON.stringify(err)}`)
67+
process.exit(1)
68+
})

src/common/helper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1526,7 +1526,7 @@ module.exports = {
15261526
autoWrapExpress,
15271527
setResHeaders,
15281528
getUserId: async (userId) => {
1529-
return userId
1529+
return String(userId)
15301530
},
15311531
getM2MToken,
15321532
postEvent,

0 commit comments

Comments
 (0)