UNPKG

tm-apps-list-api

Version:

54 lines (42 loc) 1.68 kB
"use strict"; let R = require("ramda"); let hl = require("highland"); let utils = require("./utils"); const BeneLogger = require('bene-logger'); const requestCB = require('./request'); 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.makeArticleRequestCB(config, logger, articlesEndpoint, source, publicationId); const NotFound = utils.notFound(`No pools found for publication /${source}/${publicationId}`); 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)); } };