From f0e39f7a8614c561d8510d9d889c857d334195b2 Mon Sep 17 00:00:00 2001 From: Jessica Lawshe Date: Thu, 6 Jun 2019 10:33:02 -0500 Subject: [PATCH] Merge pull request #1847 from overleaf/spd-cleanup-userstubs Add user-stub cleanup script GitOrigin-RevId: 3a1dab4aeec74fe5d42732db52737d880a86002e --- .../scripts/cleanup_dangling_user_stubs.js | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 services/web/scripts/cleanup_dangling_user_stubs.js diff --git a/services/web/scripts/cleanup_dangling_user_stubs.js b/services/web/scripts/cleanup_dangling_user_stubs.js new file mode 100644 index 0000000000..6a73abf61b --- /dev/null +++ b/services/web/scripts/cleanup_dangling_user_stubs.js @@ -0,0 +1,82 @@ +const { db } = require('../app/src/infrastructure/mongojs') +const async = require('async') +const minimist = require('minimist') +const UserMapper = require('../modules/overleaf-integration/app/src/OverleafUsers/UserMapper') + +const argv = minimist(process.argv.slice(2)) +const commit = argv.commit !== undefined + +if (!commit) { + console.log('Doing dry run without --commit') +} + +db.userstubs.aggregate( + [ + { + $lookup: { + localField: 'overleaf.id', + from: 'users', + foreignField: 'overleaf.id', + as: 'users' + } + }, + { + $project: { + email: 1, + overleaf: 1, + _id: 1, + 'users.email': 1, + 'users.emails': 1, + 'users.overleaf': 1, + 'users._id': 1 + } + }, + { + $match: { + users: { $exists: 1 }, + 'overleaf.id': { $exists: 1 } + } + } + ], + (err, stubs) => { + if (err) { + throw err + } + console.log('Found ' + stubs.length + ' dangling stubs') + async.mapLimit( + stubs, + Number(argv.limit || '10'), + (stub, callback) => { + if (commit) { + console.log( + 'Processing stub', + stub._id, + 'for user', + stub.users[0]._id + ) + UserMapper._updateUserStubReferences( + stub.overleaf, + stub._id, + stub.users[0]._id, + callback + ) + } else { + console.log( + 'Would call UserMapper._updateUserStubReferences with:', + stub.overleaf, + stub._id, + stub.users[0]._id + ) + callback() + } + }, + err => { + if (err) { + throw err + } + console.log('All done') + process.exit(0) + } + ) + } +)