Skip to content

Commit dd176b5

Browse files
authored
Merge pull request #180 from YuriGor/master
explicit email templates init #111
2 parents e87513b + 8316fbb commit dd176b5

File tree

4 files changed

+38
-30
lines changed

4 files changed

+38
-30
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@ node_modules/
1616
book/8-exp
1717
tutorials/working
1818

19-
yarn-error.log
19+
yarn-error.log
20+
.directory
21+
*.code-workspace
22+
package-lock.json

book/4-end/server/app.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const mongoose = require('mongoose');
66

77
const auth = require('./google');
88
const logger = require('./logs');
9+
const { insertTemplates } = require('./models/EmailTemplate');
910

1011
require('dotenv').config();
1112

@@ -28,7 +29,7 @@ const ROOT_URL = `http://localhost:${port}`;
2829
const app = next({ dev });
2930
const handle = app.getRequestHandler();
3031

31-
app.prepare().then(() => {
32+
app.prepare().then(async () => {
3233
const server = express();
3334

3435
const MongoStore = mongoSessionStore(session);
@@ -48,7 +49,7 @@ app.prepare().then(() => {
4849
};
4950

5051
server.use(session(sess));
51-
52+
await insertTemplates();
5253
auth({ server, ROOT_URL });
5354

5455
server.get('*', (req, res) => handle(req, res));

book/4-end/server/models/EmailTemplate.js

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,21 @@ const mongoSchema = new Schema({
2222

2323
const EmailTemplate = mongoose.model('EmailTemplate', mongoSchema);
2424

25-
function insertTemplates() {
25+
async function getEmailTemplate(name, params) {
26+
const source = await EmailTemplate.findOne({ name });
27+
if (!source) {
28+
throw new Error(`No EmailTemplates found.
29+
Please check that at least one is generated at server startup,
30+
restart your server and try again.`);
31+
}
32+
33+
return {
34+
message: _.template(source.message)(params),
35+
subject: _.template(source.subject)(params),
36+
};
37+
}
38+
39+
async function insertTemplates() {
2640
const templates = [
2741
{
2842
name: 'welcome',
@@ -40,31 +54,21 @@ function insertTemplates() {
4054
},
4155
];
4256

43-
templates.forEach(async (template) => {
44-
if ((await EmailTemplate.find({ name: template.name }).countDocuments()) > 0) {
45-
return;
46-
}
47-
48-
EmailTemplate.create(template).catch((error) => {
49-
logger.error('EmailTemplate insertion error:', error);
50-
});
57+
const updates = _.reduce(
58+
templates,
59+
(res, template) => {
60+
res.push(EmailTemplate.updateOne({ name: template.name }, template, { upsert: true }));
61+
return res;
62+
},
63+
[],
64+
);
65+
return Promise.all(updates).catch((error) => {
66+
logger.error('EmailTemplate insertion error: ', error);
67+
throw error;
5168
});
5269
}
5370

54-
insertTemplates();
55-
56-
async function getEmailTemplate(name, params) {
57-
const source = await EmailTemplate.findOne({ name });
58-
if (!source) {
59-
throw new Error(`No EmailTemplates found.
60-
Please check that at least one is generated at server startup,
61-
restart your server and try again.`);
62-
}
63-
64-
return {
65-
message: _.template(source.message)(params),
66-
subject: _.template(source.subject)(params),
67-
};
68-
}
69-
70-
module.exports = getEmailTemplate;
71+
module.exports = {
72+
insertTemplates,
73+
getEmailTemplate,
74+
};

book/4-end/server/models/User.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const _ = require('lodash');
33

44
const generateSlug = require('../utils/slugify');
55
const sendEmail = require('../aws');
6-
const getEmailTemplate = require('./EmailTemplate');
6+
const { getEmailTemplate } = require('./EmailTemplate');
77
const logger = require('../logs');
88

99
const { Schema } = mongoose;

0 commit comments

Comments
 (0)