upgrade-user-features.mjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import Settings from '@overleaf/settings'
  2. import logger from '@overleaf/logger'
  3. import { db } from '../../../app/src/infrastructure/mongodb.mjs'
  4. import FeaturesHelper from '../../../app/src/Features/Subscription/FeaturesHelper.mjs'
  5. import { fileURLToPath } from 'url'
  6. const DRY_RUN = !process.argv.includes('--dry-run=false')
  7. const { mergeFeatures, compareFeatures } = FeaturesHelper
  8. async function main(DRY_RUN, defaultFeatures) {
  9. logger.info({ defaultFeatures }, 'default features')
  10. const cursor = db.users.find(
  11. {},
  12. { projection: { _id: 1, email: 1, features: 1 } }
  13. )
  14. for await (const user of cursor) {
  15. const newFeatures = mergeFeatures(user.features, defaultFeatures)
  16. const diff = compareFeatures(newFeatures, user.features)
  17. if (Object.keys(diff).length > 0) {
  18. logger.warn(
  19. {
  20. userId: user._id,
  21. email: user.email,
  22. oldFeatures: user.features,
  23. newFeatures,
  24. },
  25. 'user features upgraded'
  26. )
  27. if (!DRY_RUN) {
  28. await db.users.updateOne(
  29. { _id: user._id },
  30. { $set: { features: newFeatures } }
  31. )
  32. }
  33. }
  34. }
  35. }
  36. export default main
  37. const filename = fileURLToPath(import.meta.url)
  38. if (filename === process.argv[1]) {
  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. }