diff --git a/services/web/scripts/extract_onboardingdatacollection_never_used_latex.js b/services/web/scripts/extract_onboardingdatacollection_never_used_latex.js new file mode 100644 index 0000000000..e25557983e --- /dev/null +++ b/services/web/scripts/extract_onboardingdatacollection_never_used_latex.js @@ -0,0 +1,76 @@ +const csv = require('csv') +const fs = require('fs') +const { + OnboardingDataCollection, +} = require('../app/src/models/OnboardingDataCollection') +const { User } = require('../app/src/models/User') + +/** + * This script extracts ODC data with some extra fields, and filters on registration date and LaTeX experience + * + * It will: + * — filter for used_latex=never + * — augment rows with user registered date and email addresses + * — filter on users registered after a certain date + * — export updated CSV + * + * Usage: + * - Locally: + * - docker compose exec web bash + * - node scripts/extract_onboardingdatacollection_never_used_latex.js + * - On the server: + * - rake connect:app[staging,web] + * - node scripts/extract_onboardingdatacollection_never_used_latex.js + * - exit + * - kubectl cp web-standalone-prod-XXXXX:/tmp/odc_neverUsedLatex.csv ~/odc_neverUsedLatex.csv + */ + +const getEmails = async userIds => { + const userEmails = await User.find( + { _id: { $in: userIds }, signUpDate: { $gte: new Date(2024, 1, 18) } }, + { email: 1, signUpDate: 1 } + ).exec() + return userEmails.map(({ email, signUpDate }) => ({ + email, + signUpDate: new Date(signUpDate).toISOString(), + })) +} + +const getUsers = async () => { + const cursor = OnboardingDataCollection.find({ usedLatex: 'never' }).cursor() + + const userIds = [] + for (let doc = await cursor.next(); doc != null; doc = await cursor.next()) { + userIds.push(doc._id.toString()) + } + + return userIds +} + +const runScript = async () => { + const users = await getUsers() + const userEmails = await getEmails(users) + + console.log('Starting to write to csv file...') + + csv.stringify( + userEmails, + { + header: true, + columns: ['email', 'signUpDate'], + }, + function (err, output) { + fs.writeFileSync('/tmp/odc_neverUsedLatex.csv', output) + if (err) { + console.log('error writing csv output: ', err) + process.exit(1) + } + process.exit() + } + ) +} + +runScript().catch(err => { + console.error(err) + process.exit(1) +})