|
| 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