From 7e61fc4035898fd29886455e4bacf31212a8f0ae Mon Sep 17 00:00:00 2001 From: nate stemen Date: Tue, 27 Jul 2021 14:15:29 -0400 Subject: [PATCH] Merge pull request #4330 from overleaf/ns-update-confirmedAt_strings migrate confirmedAt strings to date types GitOrigin-RevId: 5e8bde9b52b6696ed89a34ce58f00f31a921a57a --- ...23_convert_confirmedAt_strings_to_dates.js | 9 ++++ services/web/scripts/confirmed_at_to_dates.js | 54 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 services/web/migrations/20210726083523_convert_confirmedAt_strings_to_dates.js create mode 100644 services/web/scripts/confirmed_at_to_dates.js 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