tm-apps-list-api
Version:
58 lines (45 loc) • 1.74 kB
JavaScript
const hl = require("highland");
const utils = require("./utils");
const R = require("ramda");
const BeneLogger = require('bene-logger');
const isFuture = x => new Date(x.published_date) > new Date();
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: 'list-api'
});
logger.info('Processing Authors Request');
logger.time('Finished Authors Request');
const articlesEndpoint = !req.query.cache || req.query.cache !== "false" ? config.cacheEndpoint : config.articleEndpoint;
const query = {
where:{
author_id: `${source}.${escenicId}`,
publication_id:`${source}.${publicationId}`
},
order: [[
'published_date',
'DESC'
]],
limit:20
};
const stream = hl(db.article_author.findAll(query))
.reject(R.isNil)
.sequence()
.invoke("get", {"plain": true})
.reject(isFuture)
.pluck("article_id");
const GetArticle = utils.makeArticleRequest(logger, articlesEndpoint, source, publicationId);
const NotFound = utils.notFound(`${source}/${publicationId}/authors/${escenicId || ""} not available`);
utils.getArticlesInParallel(logger, GetArticle, NotFound, stream)
.sequence()
.reject(utils.shouldBeExcluded)
.collect()
.map(utils.addMeta)
.toCallback(utils.sendResponse(logger, res, next));
};
;