tm-apps-list-api
Version:
101 lines (80 loc) • 3.02 kB
JavaScript
"use strict";
const restify = require('restify');
const getTopStories = require("./topStories");
const getCuratedLists = require('./curatedLists');
const getPool = require("./pools");
const getSections = require("./sections");
const getTags = require("./tags");
const config = require("config");
const hl = require("highland");
const utils = require("./utils");
const ebHealth = require('eb-healthd-middleware');
const restifyEtagCache = require('restify-etag-cache');
const BeneLogger = require('bene-logger');
const logger = new BeneLogger({logging: config.logging.enabled});
const redis = require('redis');
const apicache = require('apicache');
const getArticlesByAuthorId = require('./articlesByAuthor');
let AWS = require("aws-sdk");
AWS.config.update({
region: config.dynamodb.region
});
if (config.dynamodb.endpoint) {
AWS.config.update({
"endpoint": config.dynamodb.endpoint
});
}
let dc = hl.streamifyAll(new AWS.DynamoDB.DocumentClient());
const pg = require('tm-apps-db')(config.db);
function redisCache(config, redis, apicache) {
return apicache.options({
redisClient: redis.createClient(config.cache.redis),
statusCodes: {
exclude: [],
include: [200]
}
}).middleware(config.cache.duration);
}
let app = (config, dc, pg) => {
let server = restify.createServer({
name: 'appsListAPI'
});
server.use(restify.queryParser());
server.pre(restify.pre.sanitizePath());
server.use(restify.bodyParser());
if(config.logging.enhanced === true) server.use(ebHealth({}));
if(config.cache.enabled === true) server.use(redisCache(config, redis, apicache));
server.use(restifyEtagCache());
config.cacheEndpoint = utils.setCacheEndpoint(config.articleEndpoint);
server.get("/:source/:publicationId/top-stories", getTopStories(config, dc));
server.get("/:source/:publicationId/curated-lists/:listId", getCuratedLists(config));
server.get("/:source/:publicationId/pool/:escenicId/:area", getPool(config, dc));
server.get("/:source/:publicationId/sections/:escenicId", getSections(config, pg));
server.get("/:source/:publicationId/tags/:escenicId", getTags(config, pg));
server.get("/:source/:publicationId/authors/:escenicId", getArticlesByAuthorId(config, pg));
server.get('/healthcheck', (req, res) => {
res.json({
version: process.env.npm_package_version,
server: {
name: server.name,
url: server.url
}
});
});
server.on('uncaughtException', function (req, res) {
res.send(new restify.InternalServerError());
res.end();
});
return server;
};
let server;
if (require.main === module) {
server = app(config, dc, pg);
server.listen(config.server.port, function () {
logger.info('server listening', {
server_name: server.name,
server_url: server.url
});
});
}
module.exports = server || app;