diff --git a/services/web/scripts/sync_v1_subscriptions.js b/services/web/scripts/sync_v1_subscriptions.js new file mode 100644 index 0000000000..2f56eb7f56 --- /dev/null +++ b/services/web/scripts/sync_v1_subscriptions.js @@ -0,0 +1,64 @@ +const {db} = require('../app/js/infrastructure/mongojs') +const FeaturesUpdater = require( + '../app/js/Features/Subscription/FeaturesUpdater' +) +const V1SubscriptionManager = require( + '../app/js/Features/Subscription/V1SubscriptionManager' +) +const async = require('async') +const logger = require('logger-sharelatex') +logger.logger.level('error') + +const areFeaturesEqual = function(featuresA, featuresB) { + for (const feature in featuresA) { + if (featuresA[feature] !== featuresB[feature]) { + return false + } + } + return true +} + +var outOfSyncUserCount = 0 +var userCount = null + +db.users.find({ + 'overleaf.id': { $exists: true } +}, { + overleaf: 1, + features: 1 +}, function (error, users) { + if (error) throw error + console.log('USER COUNT', userCount = users.length) + async.mapSeries(users, function (user, callback) { + console.log('REFRESHING IN v2', user._id) + FeaturesUpdater.refreshFeatures(user._id, false, function (error) { + if (error) console.error('ERROR', error) + console.log('REFRESHING IN v1', user._id) + V1SubscriptionManager.notifyV1OfFeaturesChange( + user._id, + function (error) { + if (error) console.error('ERROR', error) + db.users.find({ + _id: user._id + }, { + features: 1 + }, function (error, [updatedUser]) { + if (error) throw error + if (areFeaturesEqual(user.features, updatedUser.features)) { + console.log('UNCHANGED', user._id) + } else { + console.log('MODIFIED', user._id) + outOfSyncUserCount = outOfSyncUserCount + 1 + } + callback() + }) + } + ) + }) + }, function (error) { + if (error) throw error + console.log('FINISHED!') + console.log('OUT OF SYNC USERS', outOfSyncUserCount, '/', userCount) + process.exit() + }) +})