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() }) })