|
|
@@ -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)
|
|
|
+ })
|