tm-apps-list-api
Version:
60 lines (48 loc) • 1.88 kB
JavaScript
const hl = require("highland");
const utils = require("./utils");
const BeneLogger = require('bene-logger');
const requestCB = require('./request');
const getBySectionPoolId = (db, tableName) => hl.wrapCallback((item, cb) => {
db.query({
"TableName": tableName,
"KeyConditionExpression": 'Id = :hkey and Area = :rkey',
"ExpressionAttributeValues": {
':hkey': item.id,
':rkey': item.area
}
}, cb);
});
module.exports = (config, db) => (req, res, next) => {
const source = req.params.source;
const publicationId = req.params.publicationId;
const escenicId = req.params.escenicId;
const area = req.params.area;
const logger = new BeneLogger({logging: config.logging.enabled});
logger.setDefaults({
body: JSON.stringify(req.params),
service_name: 'apps-list-api'
});
logger.info('Pools GET request');
const stream = getBySectionPoolId(db, config.dynamodb.tableNamePools)({
"id": `${source}.${escenicId}`,
"area": area
})
.pluck("Items")
.pluck(0)
.pluck("ArticleIds")
.sequence()
.take(40)
.map(id => `${source}.${id}`);
const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint;
const GetArticle = utils.makeArticleRequestCB(config, logger, articlesEndpoint, source, publicationId);
const NotFound = utils.notFound(`No pools found for /${source}/${publicationId}/pool/${escenicId}/`);
if(requestCB(config).circuitBreaker.isOpen()) {
res.header('etag', req.header.etag);
res.send(304);
} else {
utils.getArticlesInParallel(logger, GetArticle, NotFound, stream)
.map(utils.addMeta)
.toCallback(utils.sendResponse(logger, res, next));
}
};
;