From 2b2e9597683e65f86b69eaec57be8fb2a672ea2a Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Tue, 7 Feb 2023 13:00:11 +0000 Subject: [PATCH] Merge pull request #11669 from overleaf/tm-group-invite-emails-to-lowercase Add migration that normalises group invite emails to lowercase GitOrigin-RevId: 6352848b2bf13b2eb00ce5c9bff21a3f421c82b6 --- .../fix_group_invite_emails_to_lowercase.js | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 services/web/scripts/fix_group_invite_emails_to_lowercase.js diff --git a/services/web/scripts/fix_group_invite_emails_to_lowercase.js b/services/web/scripts/fix_group_invite_emails_to_lowercase.js new file mode 100644 index 0000000000..63c7c90838 --- /dev/null +++ b/services/web/scripts/fix_group_invite_emails_to_lowercase.js @@ -0,0 +1,70 @@ +const DRY_RUN = process.env.DRY_RUN !== 'false' + +const { db, waitForDb } = require('../app/src/infrastructure/mongodb') +const { batchedUpdate } = require('./helpers/batchedUpdate') + +console.log({ + DRY_RUN, +}) + +function anyInviteEmailHasUppercaseChars(subscription) { + return subscription.teamInvites.some(invite => { + return /[A-Z]/.test(invite.email) + }) +} + +async function processBatch(_, subscriptions) { + subscriptions.forEach(subscription => { + if (anyInviteEmailHasUppercaseChars(subscription)) { + console.log('fixing emails in group invites for', subscription._id) + if (!DRY_RUN) { + db.subscriptions.updateOne({ _id: subscription._id }, [ + { + $set: { + teamInvites: { + $map: { + input: '$teamInvites', + in: { + $mergeObjects: [ + '$$this', + { + email: { + $toLower: '$$this.email', + }, + }, + ], + }, + }, + }, + }, + }, + ]) + } + } + }) +} + +async function main() { + await waitForDb() + + const projection = { + _id: 1, + teamInvites: 1, + } + const query = { + 'teamInvites.0': { + $exists: true, + }, + } + await batchedUpdate('subscriptions', query, processBatch, projection) +} + +main() + .then(() => { + console.error('Done.') + process.exit(0) + }) + .catch(error => { + console.error({ error }) + process.exit(1) + })