20240713110905_emails_reversed_hostname.mjs 939 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const tags = ['server-ce', 'server-pro']
  2. function fixEmails(user) {
  3. let emails = user.emails
  4. if (!emails || emails.length === 0) {
  5. emails = [{ email: user.email, createdAt: new Date() }]
  6. }
  7. for (let i = 0; i < emails.length; i++) {
  8. const reversedHostname = emails[i].email
  9. .split('@')[1]
  10. .split('')
  11. .reverse()
  12. .join('')
  13. if (emails[i].reversedHostname !== reversedHostname) {
  14. emails = emails.slice()
  15. emails[i].reversedHostname = reversedHostname
  16. }
  17. }
  18. return emails
  19. }
  20. const migrate = async client => {
  21. const { db } = client
  22. const cursor = db.users.find({}, { projection: { email: 1, emails: 1 } })
  23. for await (const user of cursor) {
  24. const emails = fixEmails(user)
  25. if (user.emails !== emails) {
  26. await db.users.updateOne({ _id: user._id }, { $set: { emails } })
  27. }
  28. }
  29. }
  30. const rollback = async () => {}
  31. export default {
  32. tags,
  33. migrate,
  34. rollback,
  35. }