From c085faa15785ffe0762df8c80a78ff854de8ac3d Mon Sep 17 00:00:00 2001 From: Georgios Anastasiou Date: Mon, 8 Jan 2018 13:03:38 +0200 Subject: [PATCH 1/3] Implemented api for searching lists that have parameter email as a subscriber --- lib/models/lists.js | 29 +++++++++++++++++++++++++++++ routes/api.js | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/lib/models/lists.js b/lib/models/lists.js index 839fefe1..79c48888 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -4,6 +4,7 @@ let db = require('../db'); let tools = require('../tools'); let shortid = require('shortid'); let segments = require('./segments'); +let subscriptions = require('./subscriptions'); let _ = require('../translate')._; let tableHelpers = require('../table-helpers'); @@ -64,6 +65,34 @@ module.exports.quicklist = callback => { }); }; +module.exports.getListsWithEmail = (email, callback) => { + db.getConnection((err, connection) => { + if (err) { + return callback(err); + } + + connection.query('SELECT id, name FROM lists', (err, rows) => { + connection.release(); + if (err) { + return callback(err); + } + + let lists = (rows || []).map(tools.convertKeys); + const results = []; + lists.forEach((list, index, arr) => { + subscriptions.getByEmail(list.id, email, (err, sub) => { + if (sub) { + results.push(list.id); + } + if (index === arr.length - 1) { + callback(null, lists.filter(list => results.includes(list.id))); + } + }); + }); + }); + }); +} + module.exports.getByCid = (cid, callback) => { resolveCid(cid, (err, id) => { if (err) { diff --git a/routes/api.js b/routes/api.js index 758b5224..d3101952 100644 --- a/routes/api.js +++ b/routes/api.js @@ -348,6 +348,22 @@ router.get('/subscriptions/:listId', (req, res) => { }); }); +router.get('/subscriptions/email/:email', (req, res) => { + lists.getListsWithEmail(req.params.email, (err, lists) => { + if (err) { + res.status(500); + return res.json({ + error: err.message || err, + data: [] + }); + } + res.status(200); + res.json({ + data: lists + }); + }); +}); + router.post('/field/:listId', (req, res) => { let input = {}; Object.keys(req.body).forEach(key => { From 678e6a5d59fa5c2dacfb40b66e46614b424614ef Mon Sep 17 00:00:00 2001 From: Georgios Anastasiou Date: Mon, 8 Jan 2018 13:47:28 +0200 Subject: [PATCH 2/3] Fixed to pass test --- lib/models/lists.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/models/lists.js b/lib/models/lists.js index 79c48888..0b208673 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -81,17 +81,20 @@ module.exports.getListsWithEmail = (email, callback) => { const results = []; lists.forEach((list, index, arr) => { subscriptions.getByEmail(list.id, email, (err, sub) => { + if (err) { + return callback(err); + } if (sub) { results.push(list.id); } if (index === arr.length - 1) { - callback(null, lists.filter(list => results.includes(list.id))); + return callback(null, lists.filter(list => results.includes(list.id))); } }); }); }); }); -} +}; module.exports.getByCid = (cid, callback) => { resolveCid(cid, (err, id) => { From bd53a77bed04523b087047c15cbdf99dfb998e56 Mon Sep 17 00:00:00 2001 From: Georgios Anastasiou Date: Tue, 9 Jan 2018 12:20:46 +0200 Subject: [PATCH 3/3] Changed route --- routes/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/api.js b/routes/api.js index d3101952..d6bf3566 100644 --- a/routes/api.js +++ b/routes/api.js @@ -348,7 +348,7 @@ router.get('/subscriptions/:listId', (req, res) => { }); }); -router.get('/subscriptions/email/:email', (req, res) => { +router.get('/lists/:email', (req, res) => { lists.getListsWithEmail(req.params.email, (err, lists) => { if (err) { res.status(500);