upgrade-user-features.js 1.5 KB

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