Files
overleaf-cep/services/web/app/src/Features/Subscription/UserFeaturesUpdater.js
Brian Gough 1645fc7781 Merge pull request #5425 from overleaf/bg-add-feature-override-script
add feature override script

GitOrigin-RevId: 90def174b4ac182b6f62984e8f9621f3dc16b92d
2021-10-14 08:03:18 +00:00

57 lines
1.5 KiB
JavaScript

const { User } = require('../../models/User')
const { promisifyAll } = require('../../util/promises')
function _featuresChanged(newFeatures, featuresBefore) {
for (const feature in newFeatures) {
if (featuresBefore[feature] !== newFeatures[feature]) {
return true
}
}
return false
}
module.exports = {
updateFeatures(userId, features, callback) {
const update = {
featuresUpdatedAt: new Date(),
}
for (const key in features) {
const value = features[key]
update[`features.${key}`] = value
}
User.findByIdAndUpdate(userId, update, (err, docBeforeUpdate) => {
let featuresChanged = false
if (docBeforeUpdate) {
featuresChanged = _featuresChanged(features, docBeforeUpdate.features)
}
return callback(err, features, featuresChanged)
})
},
overrideFeatures(userId, features, callback) {
const update = { features, featuresUpdatedAt: new Date() }
User.findByIdAndUpdate(userId, update, (err, docBeforeUpdate) => {
let featuresChanged = false
if (docBeforeUpdate) {
featuresChanged = _featuresChanged(features, docBeforeUpdate.features)
}
return callback(err, featuresChanged)
})
},
createFeaturesOverride(userId, featuresOverride, callback) {
User.updateOne(
{ _id: userId },
{ $push: { featuresOverrides: featuresOverride } },
callback
)
},
}
module.exports.promises = promisifyAll(module.exports, {
multiResult: {
updateFeatures: ['features', 'featuresChanged'],
},
})