overleaf/services/web/scripts/sync_v1_subscriptions.js
2018-06-26 11:30:27 +01:00

72 lines
2.1 KiB
JavaScript

let USER_QUERY = null
if (process.argv[2] === '--all') {
USER_QUERY = {}
} else if (process.argv[2] === '--v1-only') {
USER_QUERY = { 'overleaf.id': { $exists: true } }
} else {
console.error(`Usage:\n\n\tnode ${process.argv[1]} (--all|--v1-only)`)
process.exit(1)
}
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(USER_QUERY, {
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()
})
})