all files / src/ curatedLists.js

100% Statements 20/20
50% Branches 3/6
100% Functions 0/0
100% Lines 19/19
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                                           
"use strict";
 
let hl = require("highland");
let utils = require("./utils");
const request = require('superagent');
const BeneLogger = require('bene-logger');
 
module.exports = config => (req, res, next) => {
 
    const uncached = req.params.uncached;
    const source = req.params.source;
    const publicationId = req.params.publicationId;
    const listId = req.params.listId;
 
    const logger = new BeneLogger({logging: config.logging.enabled});
 
    logger.setDefaults({
        body: JSON.stringify(req.params),
        service_name: 'appsListAPI'
    });
 
    logger.info('Pools GET request');
 
    const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint;
    const curatedListsEndpoint = uncached === 'true' ? config.curatedListsEndpoint.replace('://', '://org-') : config.curatedListsEndpoint;
    const stream = hl(request.get(`${curatedListsEndpoint}/${source}/${listId}`))
        .map(JSON.parse)
        .sequence()
        .map(id => `${source}.${id}`);
    
    const GetArticle = utils.makeArticleRequest(logger, articlesEndpoint, source, publicationId);
    const NotFound = utils.notFound(`No curated lists found for list /${source}/${listId}`);
 
    utils.getArticlesInParallel(logger, GetArticle, NotFound, stream)
        .sequence()
        .reject(utils.shouldBeExcluded)
        .collect()
        .map(utils.addMeta)
        .toCallback(utils.sendResponse(logger, res, next));
};