UNPKG

tm-apps-list-api

Version:

71 lines (60 loc) 2.24 kB
"use strict"; let hl = require("highland"); let utils = require("./utils"); let R = require("ramda"); const BeneLogger = require('bene-logger'); const tz = require('timezone/loaded'); const requestCB = require('./request'); module.exports = (config, db) => (req, res, next) => { const publicationId = req.params.publicationId; const escenicId = req.params.escenicId; const source = req.params.source; const logger = new BeneLogger({logging: config.logging.enabled}); logger.setDefaults({ tag_id: `${source}.${escenicId}`, source: source, service_name: 'apps-api' }); logger.info('Processing Sections Request'); logger.time('Finished Sections Request'); const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint; const stream = hl(db.tag.find({ "where": { "tag_id": `${source}.${escenicId}` } })) .reject(R.isNil) .invoke("get", {"plain": true}) .pluck("id") .flatMap(id => { return hl(db.article_tag.findAll({ "where": { "tag_id": id, "published_date": { "$and": { "$ne": null, "$lte": tz(new Date(), '%Y-%m-%dT%H:%M:%S.%3N%^z', 'UTC') } } }, "limit": 30, "order": [[ 'published_date', 'DESC' ]] })); }) .sequence() .invoke("get", {"plain": true}) .pluck("article_id"); const GetArticle = utils.makeArticleRequestCB(config, logger, articlesEndpoint, source, publicationId); const NotFound = utils.notFound(`${source}/${publicationId}/tags/${escenicId || ""} not available`); 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)); } };