diff --git a/services/web/migrations/20210726083523_convert_confirmedAt_strings_to_dates.js b/services/web/migrations/20210726083523_convert_confirmedAt_strings_to_dates.js new file mode 100644 index 0000000000..1c9a599e50 --- /dev/null +++ b/services/web/migrations/20210726083523_convert_confirmedAt_strings_to_dates.js @@ -0,0 +1,9 @@ +const updateStringDates = require('../scripts/confirmed_at_to_dates.js') + +exports.migrate = async client => { + await updateStringDates() +} + +exports.rollback = async client => { + /* nothing to do */ +} diff --git a/services/web/scripts/confirmed_at_to_dates.js b/services/web/scripts/confirmed_at_to_dates.js new file mode 100644 index 0000000000..1c63951047 --- /dev/null +++ b/services/web/scripts/confirmed_at_to_dates.js @@ -0,0 +1,54 @@ +const { db, waitForDb } = require('../app/src/infrastructure/mongodb') + +async function updateStringDates() { + await waitForDb() + const users = await db.users.aggregate([ + { $unwind: { path: '$emails' } }, + { + $match: { 'emails.confirmedAt': { $exists: true, $type: 'string' } }, + }, + { + $project: { + _id: 1, + 'emails.email': 1, + 'emails.confirmedAt': 1, + }, + }, + ]) + + let user + let count = 0 + while ((user = await users.next())) { + count += 1 + if (count % 10000 === 0) { + console.log(`processed ${count} users`) + } + const confirmedAt = user.emails.confirmedAt + const dateConfirmedAt = new Date(confirmedAt.replace(/ UTC$/, '')) + await db.users.updateOne( + { + _id: user._id, + 'emails.email': user.emails.email, + }, + { + $set: { + 'emails.$.confirmedAt': dateConfirmedAt, + }, + } + ) + } + console.log(`Updated ${count} confirmedAt strings to dates!`) +} + +if (!module.parent) { + updateStringDates() + .then(() => { + process.exit(0) + }) + .catch(error => { + console.error(error) + process.exit(1) + }) +} + +module.exports = updateStringDates