mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-31 21:01:33 +02:00
57 lines
1.5 KiB
JavaScript
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'],
|
|
},
|
|
})
|