2
0

20180926134048-make-email-unique.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import mongoose from 'mongoose';
  2. import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
  3. import loggerFactory from '~/utils/logger';
  4. const logger = loggerFactory('growi:migrate:make-email-unique');
  5. module.exports = {
  6. async up(db, next) {
  7. logger.info('Start migration');
  8. mongoose.connect(getMongoUri(), mongoOptions);
  9. const User = getModelSafely('User') || require('~/server/models/user')();
  10. // get all users who has 'deleted@deleted' email
  11. const users = await User.find({ email: 'deleted@deleted' });
  12. if (users.length > 0) {
  13. logger.info(`${users.length} users found. Replace email...`, users);
  14. }
  15. // make email unique
  16. const promises = users.map((user) => {
  17. const now = new Date();
  18. const deletedLabel = `deleted_at_${now.getTime()}`;
  19. user.email = `${deletedLabel}@deleted`;
  20. return user.save();
  21. });
  22. await Promise.all(promises);
  23. // sync index
  24. logger.info('Invoking syncIndexes');
  25. await User.syncIndexes();
  26. await mongoose.disconnect();
  27. logger.info('Migration has successfully terminated');
  28. next();
  29. },
  30. down(db, next) {
  31. // do not rollback
  32. next();
  33. },
  34. };