Skip to content

Commit d7500e5

Browse files
committed
implementando...
1 parent bab2ee8 commit d7500e5

File tree

10 files changed

+117
-7
lines changed

10 files changed

+117
-7
lines changed

server/bin/send_email.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const connection = require('../src/db/connection');
2+
// const sender = require('../src/email/sender');
3+
const campaignModel = require('../src/models/campaign');
4+
const leadModel = require('../src/models/lead');
5+
const tracker = require('../src/email/tracker');
6+
7+
async function send() {
8+
const now = new Date();
9+
const campaigns = await campaignModel.find({start: {$lt: now}, status: null});
10+
11+
for (let i = 0; i < campaigns.length; i++) {
12+
console.log('send campaign')
13+
let lists = campaigns[i].lists;
14+
15+
let leads = await leadModel.find({ lists: {$in: lists}});
16+
17+
leads.map((lead) => {
18+
console.log('send lead')
19+
let mailBody = tracker(campaigns[i].body, campaigns[i]._id, lead._id);
20+
console.log(lead.email, campaigns[i].title, mailBody);
21+
sender(lead.email, campaigns[i].title, mailBody); //envia o email
22+
});
23+
24+
campaigns[i].status = 'enviado';
25+
campaigns[i].save();
26+
27+
28+
console.log('end')
29+
}
30+
}
31+
32+
module.exports = send;

server/bin/send_email_service.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const send = require('./send_email');
2+
3+
async function init() {
4+
send();
5+
6+
let time = 1000 * 3;
7+
8+
setTimeout(() => {
9+
init();
10+
}, time);
11+
}
12+
13+
console.log('start send email');
14+
15+
init();

server/bin/send_email_tasks.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const send = require('./send_email');
2+
3+
send();

server/docker-compose.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,15 @@ services:
1616
- ./:/home/node/app
1717
ports:
1818
- "3000:3000"
19-
command: "node_modules/.bin/nodemon -L --exec npm start"
19+
command: "node_modules/.bin/nodemon -L --exec npm start"
20+
sendemail:
21+
image: "node:10.18.0"
22+
user: "node"
23+
working_dir: /home/node/app
24+
environment:
25+
- NODE_ENV=development
26+
volumes:
27+
- ./:/home/node/app
28+
ports:
29+
- "3000:3000"
30+
command: "node bin/send_email.js"

server/src/controllers/tracking.js

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module.exports = function () {
2626
let actions = lead.actions;
2727
actions.push({
2828
campaign: campaignId,
29-
actions: [{
29+
action: [{
3030
typeAction: 'open',
3131
link: '',
3232
date: new Date()
@@ -43,13 +43,51 @@ module.exports = function () {
4343
};
4444

4545
let click = function (req, res) {
46+
if (!req.query.link) {
47+
return res.status(404).send('Not Found');
48+
}
49+
4650
let campaignId = req.params.id;
4751
let leadId = req.params.leadid;
52+
53+
campaignModel.findById(campaignId, function (err, campaign) {
54+
if (err) {
55+
return err;
56+
}
57+
campaign.clicks += 1;
58+
campaign.save();
59+
});
60+
61+
leadModel.findById(leadId, function (err, lead) {
62+
if (err) {
63+
return err;
64+
}
65+
66+
if (!lead) {
67+
return;
68+
}
69+
70+
let actions = lead.actions;
71+
actions.push({
72+
campaign: campaignId,
73+
action: [{
74+
typeAction: 'click',
75+
link: req.query.link,
76+
date: new Date()
77+
}]
78+
});
79+
80+
lead.actions = actions;
81+
lead.save();
82+
});
83+
84+
res.writeHead(302, {'Location': req.query.link});
85+
res.end();
4886
};
4987

5088
let controller = {
51-
open: open(),
52-
click: click()
89+
open: open,
90+
click: click
5391
};
5492

5593
return controller;

server/src/db/connection.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
let mongoose = require('mongoose');
22

3+
mongoose.Promise = global.Promise;
34
mongoose.connect('mongodb://mongo:27017/email_marketing', { useMongoClient: true }, function (err) {
45
// mongoose.connect(MONGODB_URL, { useNewUrlParser: true, useUnifiedTopology: true, }, function (err) {
56
if (err) {

server/src/email/tracker.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module.exports = function (body, campaignId, leadId) {
2+
let img = '<img src="/campaigns/tracking/open/' + campaignId + '/' + leadId + '">';
3+
let ulr_tracking = '/campaigns/tracking/click/' + campaignId + '/' + leadId + '?link=';
4+
let regex = /<a href="(.*?)"/g;
5+
6+
return body.replace(regex, "/<a href=\"" + ulr_tracking + "$1\"") + img;
7+
}

server/src/models/lead.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const Lead = mongoose.Schema({
1414
{
1515
campaign: {
1616
type: ObjectId,
17-
ref: "List"
17+
ref: "Campaign"
1818
},
1919
action: [
2020
{

server/src/routes/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ let auth = require("./auth");
44
let campaigns = require("./campaigns");
55
let leads = require("./leads");
66
let lists = require("./lists");
7+
let tracking = require("./tracking");
78

89
module.exports = app => {
910
app.get("/", function(req, res) {
@@ -16,4 +17,5 @@ module.exports = app => {
1617
campaigns(app);
1718
leads(app);
1819
lists(app);
20+
tracking(app);
1921
};

server/src/routes/tracking.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module.exports = function (app) {
2-
let controller = require('../controllers/trackin')();
2+
let controller = require('../controllers/tracking')();
33

4-
app.get('/campaigns/tracking/open/:', controller.index);
4+
app.get('/campaigns/tracking/open/:id/:leadid', controller.open);
5+
app.get('/campaigns/tracking/open/:id/:leadid', controller.click);
56

67
}

0 commit comments

Comments
 (0)