20180926134048-make-email-unique.js 1.2 KB

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