| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /* eslint-disable max-len */
- /**
- * run with: node import_user_collabratec_ids /path/user_collabratec_ids.csv
- *
- * where csv is generated from v1 with sql statement like:
- *
- * \copy ( SELECT ut.user_id, u.email, u.confirmed_at, ut.team_user_id AS collabratec_id FROM user_teams ut JOIN teams t ON ut.team_id = t.id JOIN users u ON ut.user_id = u.id WHERE t.name = 'IEEECollabratec' AND ut.removed_at IS NULL AND ut.team_user_id IS NOT NULL ) to 'user_collabratec_ids.csv' WITH CSV HEADER;
- */
- /* eslint-enable */
- 'use strict'
- const UserMapper = require('../../modules/overleaf-integration/app/src/OverleafUsers/UserMapper')
- const User = require('../../app/src/models/User').User
- const UserStub = require('../../app/src/models/UserStub').UserStub
- const async = require('async')
- const csvParser = require('csv-parser')
- const fs = require('fs')
- const minimist = require('minimist')
- const argv = minimist(process.argv.slice(2))
- let lineNum = 0
- const records = []
- fs.createReadStream(argv._[0])
- .pipe(csvParser())
- .on('data', data => {
- data.lineNum = ++lineNum
- records.push(data)
- })
- .on('end', () => {
- async.mapSeries(records, loadRecord, function(err) {
- if (err) console.error(err)
- process.exit()
- })
- })
- function loadRecord(record, cb) {
- const overleafId = parseInt(record.user_id)
- User.findOne(
- { 'overleaf.id': overleafId },
- { _id: 1, thirdPartyIdentifiers: 1 },
- function(err, user) {
- if (err) return cb(err)
- const query = {
- 'thirdPartyIdentifiers.providerId': {
- $ne: 'collabratec'
- }
- }
- const update = {
- $push: {
- thirdPartyIdentifiers: {
- externalUserId: record.collabratec_id,
- externalData: {},
- providerId: 'collabratec'
- }
- }
- }
- if (user) {
- console.log(record.lineNum + ': setting TPI for User ' + user._id)
- query._id = user._id
- User.update(query, update, cb)
- } else {
- // create user stub
- const olUser = {
- confirmed_at: record.confirmed_at,
- email: record.email,
- id: overleafId
- }
- console.log(record.lineNum + ': User not found for ' + record.user_id)
- return UserMapper.getSlIdFromOlUser(olUser, function(err, userStubId) {
- if (err) return cb(err)
- console.log(
- record.lineNum + ': setting TPI for UserStub ' + userStubId
- )
- query._id = userStubId
- UserStub.update(query, update, cb)
- })
- }
- }
- )
- }
|