tm-apps-list-api
Version:
51 lines (39 loc) • 1.56 kB
JavaScript
let R = require("ramda");
let hl = require("highland");
let utils = require("./utils");
const BeneLogger = require('bene-logger');
const getByPubId = (tableName, db) => hl.wrapCallback((id, cb) => {
db.query({
"TableName": tableName,
"KeyConditionExpression": 'Id = :hkey',
"ExpressionAttributeValues": {
':hkey': id
},
"Limit": 40
}, cb);
});
module.exports = (config, db) => (req, res, next) => {
const source = req.params.source;
const publicationId = req.params.publicationId;
const logger = new BeneLogger({logging: config.logging.enabled});
logger.setDefaults({
body: JSON.stringify(req.params),
service_name: 'appsTopStoriesAPI'
});
logger.info('Pools GET request');
const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint;
const stream = getByPubId(config.dynamodb.tableName, db)(`${source}.${publicationId}`)
.pluck("Items")
.reject(R.isEmpty)
.sequence()
.pluck("ArticleId");
const GetArticle = utils.makeArticleRequest(logger, articlesEndpoint, source, publicationId);
const NotFound = utils.notFound(`No pools found for publication /${source}/${publicationId}`);
utils.getArticlesInParallel(logger, GetArticle, NotFound, stream)
.sequence()
.reject(utils.shouldBeExcluded)
.collect()
.map(utils.addMeta)
.toCallback(utils.sendResponse(logger, res, next));
};
;