lad
Version:
Lad is the best Node.js framework. Made by a former Express TC and Koa team member.
79 lines (62 loc) • 1.98 kB
JavaScript
// eslint-disable-next-line import/no-unassigned-import
require('../config/env');
const { parentPort } = require('worker_threads');
const Graceful = require('@ladjs/graceful');
const Mongoose = require('@ladjs/mongoose');
const dayjs = require('dayjs');
const sharedConfig = require('@ladjs/shared-config');
const config = require('../config');
const email = require('../helpers/email');
const logger = require('../helpers/logger');
const bree = require('../bree');
const Users = require('../app/models/user');
const breeSharedConfig = sharedConfig('BREE');
const mongoose = new Mongoose({ ...breeSharedConfig.mongoose, logger });
const graceful = new Graceful({
mongooses: [mongoose],
brees: [bree],
logger
});
graceful.listen();
(async () => {
await mongoose.connect();
const object = {
created_at: {
$lte: dayjs().subtract(1, 'minute').toDate()
}
};
object[config.userFields.welcomeEmailSentAt] = { $exists: false };
object[config.userFields.hasVerifiedEmail] = true;
const _ids = await Users.distinct('_id', object);
// send welcome email
await Promise.all(
_ids.map(async (_id) => {
try {
const user = await Users.findById(_id);
// in case user deleted their account
if (!user) return;
// in case email was sent for whatever reason
if (user[config.userFields.welcomeEmailSentAt]) return;
// send email
await email({
template: 'welcome',
message: {
to: user[config.userFields.fullEmail]
},
locals: { user: user.toObject() }
});
// store that we sent this email
await Users.findByIdAndUpdate(user._id, {
$set: {
[config.userFields.welcomeEmailSentAt]: new Date()
}
});
await user.save();
} catch (err) {
logger.error(err);
}
})
);
if (parentPort) parentPort.postMessage('done');
else process.exit(0);
})();