lad
Version:
Lad is the best Node.js framework. Made by a former Express TC and Koa team member.
80 lines (65 loc) • 1.9 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 sharedConfig = require('@ladjs/shared-config');
const humanize = require('humanize-string');
const titleize = require('titleize');
const config = require('../config');
const logger = require('../helpers/logger');
const email = require('../helpers/email');
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 users = await Users.find({
account_updates: {
$exists: true,
$not: { $size: 0 }
}
});
// merge and map to actionable email
await Promise.all(
users.map(async (user) => {
const accountUpdates = user[config.userFields.accountUpdates].map(
(update) => {
const { fieldName, current, previous } = update;
return {
name: fieldName,
text: titleize(humanize(fieldName)),
current,
previous
};
}
);
// send account updates email
try {
await email({
template: 'account-update',
message: {
to: user[config.userFields.fullEmail]
},
locals: {
accountUpdates
}
});
// delete account updates
user[config.userFields.accountUpdates] = [];
await user.save();
} catch (err) {
logger.error(err);
}
})
);
if (parentPort) parentPort.postMessage('done');
else process.exit(0);
})();