upgrade-user-features.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const Settings = require('@overleaf/settings')
  2. const logger = require('@overleaf/logger')
  3. const { db } = require('../../../app/src/infrastructure/mongodb')
  4. const {
  5. mergeFeatures,
  6. compareFeatures,
  7. } = require('../../../app/src/Features/Subscription/FeaturesHelper')
  8. const DRY_RUN = !process.argv.includes('--dry-run=false')
  9. async function main(DRY_RUN, defaultFeatures) {
  10. logger.info({ defaultFeatures }, 'default features')
  11. const cursor = db.users.find(
  12. {},
  13. { projection: { _id: 1, email: 1, features: 1 } }
  14. )
  15. for await (const user of cursor) {
  16. const newFeatures = mergeFeatures(user.features, defaultFeatures)
  17. const diff = compareFeatures(newFeatures, user.features)
  18. if (Object.keys(diff).length > 0) {
  19. logger.warn(
  20. {
  21. userId: user._id,
  22. email: user.email,
  23. oldFeatures: user.features,
  24. newFeatures,
  25. },
  26. 'user features upgraded'
  27. )
  28. if (!DRY_RUN) {
  29. await db.users.updateOne(
  30. { _id: user._id },
  31. { $set: { features: newFeatures } }
  32. )
  33. }
  34. }
  35. }
  36. }
  37. module.exports = main
  38. if (require.main === module) {
  39. if (DRY_RUN) {
  40. console.error('---')
  41. console.error('Dry-run enabled, use --dry-run=false to commit changes')
  42. console.error('---')
  43. }
  44. main(DRY_RUN, Settings.defaultFeatures)
  45. .then(() => {
  46. console.log('Done.')
  47. process.exit(0)
  48. })
  49. .catch(error => {
  50. console.error({ error })
  51. process.exit(1)
  52. })
  53. }