/
dailyEmail.js
138 lines (113 loc) · 3.97 KB
/
dailyEmail.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const helper = require('sendgrid').mail;
function main(args) {
let SG_KEY = args.SG_KEY;
let char = args.character;
let from_email = new helper.Email('raymondcamden@gmail.com','Raymond Camden');
let to_email = new helper.Email('raymondcamden@gmail.com','Raymond Camden');
let subject = 'Your Daily Comic Book Character: '+char.name;
/*
Generate the HTML for the email first.
*/
let friendsTemplate = '';
let enemiesTemplate = '';
let powersTemplate = '';
let teamsTemplate = '';
let creatorsTemplate = '';
//need to find female (don't think a default exists)
let defaultMaleImage = 'https://comicvine.gamespot.com/api/image/scale_large/1-male-good-large.jpg';
let image = '';
if(!char.image) {
image = defaultMaleImage;
} else if(char.image && !char.image.super_url) {
image = defaultMaleImage;
} else {
image = char.image.super_url;
}
return new Promise( (resolve, reject) => {
let publisher = 'None';
if(char.publisher && char.publisher.name) publisher = char.publisher.name;
/*
If no description, copy deck over. deck can be blank too though
also sometimes its <br/>, sometimes <p>.</p>
*/
if(char.description && (char.description === '<br/>' || char.description === '<p>.</p>')) delete char.description;
if(!char.description && !char.deck) {
char.description = 'No description.';
} else if(!char.description) {
char.description = char.deck;
}
if(char.character_friends.length) {
friendsTemplate = `<h2">Friends</h2><ul>`;
char.character_friends.forEach((friend) => {
friendsTemplate += `<li><a href="${friend.site_detail_url}">${friend.name}</a></li>`;
});
friendsTemplate += '</ul>';
}
if(char.character_enemies.length) {
enemiesTemplate = `<h2>Enemies</h2><ul>`;
char.character_enemies.forEach((enemy) => {
enemiesTemplate += `<li><a href="${enemy.site_detail_url}" target="_new">${enemy.name}</a></li>`;
});
enemiesTemplate += '</ul>';
}
if(char.powers.length) {
powersTemplate = `<h2>Powers</h2><ul>`;
char.powers.forEach((power) => {
powersTemplate += `<li>${power.name}</li>`;
});
powersTemplate += '</ul>';
}
if(char.teams.length) {
teamsTemplate = `<h2>Teams</h2><ul>`;
char.teams.forEach((team) => {
teamsTemplate += `<li><a href="${team.site_detail_url}" target="_new">${team.name}</a></li>`;
});
teamsTemplate += '</ul>';
}
if(char.creators.length) {
creatorsTemplate = `<h2>Creators</h2><ul>`;
char.creators.forEach((creator) => {
creatorsTemplate += `<li><a href="${creator.site_detail_url}" target="_new">${creator.name}</a></li>`;
});
creatorsTemplate += '</ul>';
}
let mainTemplate = `
<html>
<head>
<meta name="viewport" content="width=device-width">
</head>
<body style="background-color: #ffeb3b;padding: 10px">
<h1>${char.name}</h1>
<p>
<strong>Publisher:</strong> ${publisher}<br/>
<strong>First Issue:</strong> <a href="${char.first_issue.site_detail_url}" target="_new">${char.first_issue.volume.name} ${char.first_issue.issue_number} (${char.first_issue.cover_date})</a><br/>
</p>
<a href="${char.site_detail_url}" target="_new"><img style="max-width:500px" title="Character Image" src="${image}"></a>
<p>${char.description}</p>
${creatorsTemplate}
${powersTemplate}
${teamsTemplate}
${friendsTemplate}
${enemiesTemplate}
</body>
</html>
`;
let mailContent = new helper.Content('text/html', mainTemplate);
let mail = new helper.Mail(from_email, subject, to_email, mailContent);
let sg = require('sendgrid')(SG_KEY);
var request = sg.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON()
});
sg.API(request, function(error, response) {
if(error) {
console.log('error in sg', error.response.body);
reject({error:error.message})
} else {
console.log('it should be well');
resolve({success:1});
}
});
});
}