UNPKG

tm-apps-list-api

Version:

57 lines (45 loc) 1.76 kB
"use strict"; const hl = require("highland"); const utils = require("./utils"); const BeneLogger = require('bene-logger'); 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.makeArticleRequest(logger, articlesEndpoint, source, publicationId); const NotFound = utils.notFound(`No pools found for /${source}/${publicationId}/pool/${escenicId}/`); utils.getArticlesInParallel(logger, GetArticle, NotFound, stream) .sequence() .reject(utils.shouldBeExcluded) .collect() .map(utils.addMeta) .toCallback(utils.sendResponse(logger, res, next)); };