Files
Verso/services/web/app/src/Features/User/UserOnboardingController.js
T
Jakob Ackermann 0c6e12a5cb Merge pull request #3189 from overleaf/jpa-mongodb-latest
[misc] upgrade mongodb package and run codemod for find projections

GitOrigin-RevId: 01291b3095779abe045e39b82f071ac84285a508
2020-10-06 02:04:39 +00:00

60 lines
1.6 KiB
JavaScript

const { db, ObjectId } = require('../../infrastructure/mongodb')
const UserUpdater = require('./UserUpdater')
const EmailHandler = require('../Email/EmailHandler')
const logger = require('logger-sharelatex')
const async = require('async')
const _ = require('underscore')
module.exports = {
sendRecentSignupOnboardingEmails(req, res, next) {
res.setTimeout(600 * 1000) // increase timeout to handle days with a lot of signups
// find all the users with no onboardingEmailSentAt and
// have signed up in the last 7 days
db.users
.find(
{
onboardingEmailSentAt: null,
_id: {
$gt: ObjectId.createFromTime(Date.now() / 1000 - 7 * 24 * 60 * 60)
}
},
{ projection: { email: 1 } }
)
.toArray(function(error, users) {
if (error) {
return next(error)
}
const ids = _.map(users, function(user) {
return user._id
})
logger.log('SENDING USER ONBOARDING EMAILS TO: ', ids)
async.mapLimit(users, 10, sendOne, function(error) {
if (error) {
return next(error)
}
logger.log('DONE SENDING ONBOARDING EMAILS')
res.send(ids)
})
})
}
}
function sendOne(user, callback) {
var opts = {
to: user.email
}
EmailHandler.sendEmail('userOnboardingEmail', opts, function(error) {
if (error) {
return callback(error)
}
UserUpdater.updateUser(
user._id,
{ $set: { onboardingEmailSentAt: new Date() } },
function() {
callback()
}
)
})
}