Merge branch 'develop' of git.digitaltelepresence.com:digital-telepresence/dtp-base into develop

master
rob 11 months ago
commit 4799e429a0

@ -17,6 +17,7 @@ class NewsroomController extends SiteController {
async start ( ) { async start ( ) {
const { dtp } = this; const { dtp } = this;
const { limiter: limiterService } = dtp.services; const { limiter: limiterService } = dtp.services;
const limiterConfig = limiterService.config.newsroom;
const router = express.Router(); const router = express.Router();
dtp.app.use('/newsroom', router); dtp.app.use('/newsroom', router);
@ -28,21 +29,27 @@ class NewsroomController extends SiteController {
router.param('feedId', this.populateFeedId.bind(this)); router.param('feedId', this.populateFeedId.bind(this));
router.get('/feed', this.getUnifiedFeed.bind(this)); router.get('/feed',
limiterService.createMiddleware(limiterConfig.getUnifiedFeed),
this.getUnifiedFeed.bind(this),
);
router.get('/:feedId', router.get('/:feedId',
limiterService.createMiddleware(limiterService.config.newsroom.getFeedView), limiterService.createMiddleware(limiterConfig.getFeedView),
this.getFeedView.bind(this), this.getFeedView.bind(this),
); );
router.get('/', router.get('/',
limiterService.createMiddleware(limiterService.config.newsletter.getIndex), limiterService.createMiddleware(limiterConfig.getIndex),
this.getHome.bind(this), this.getHome.bind(this),
); );
} }
async populateFeedId (req, res, next, feedId) { async populateFeedId (req, res, next, feedId) {
const { feed: feedService } = this.dtp.services; const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try { try {
res.locals.feed = await feedService.getById(feedId); res.locals.feed = await feedService.getById(feedId);
if (!res.locals.feed) { if (!res.locals.feed) {
@ -50,17 +57,31 @@ class NewsroomController extends SiteController {
} }
return next(); return next();
} catch (error) { } catch (error) {
this.log.error('failed to populate feedId', { feedId, error }); loganService.sendRequestEvent(module.exports, req, {
level: 'error',
event: 'populateFeedId',
message: error.message,
data: { feedId, error },
});
return next(error); return next(error);
} }
} }
async getUnifiedFeed (req, res) { async getUnifiedFeed (req, res) {
const { feed: feedService } = this.dtp.services; const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try { try {
res.locals.pagination = this.getPaginationParameters(req, 20); res.locals.pagination = this.getPaginationParameters(req, 20);
res.locals.newsroom = await feedService.getNewsfeed(res.locals.pagination); res.locals.newsroom = await feedService.getNewsfeed(res.locals.pagination);
loganService.sendRequestEvent(module.exports, req, {
level: 'info',
event: 'getUnifiedFeed',
data: { fmt: req.query.fmt || 'html' },
});
switch (req.query.fmt) { switch (req.query.fmt) {
case 'json': case 'json':
res.status(200).json(res.locals.newsroom); res.status(200).json(res.locals.newsroom);
@ -71,7 +92,12 @@ class NewsroomController extends SiteController {
break; break;
} }
} catch (error) { } catch (error) {
this.log.error('failed to present newsfeed JSON', { error }); loganService.sendRequestEvent(module.exports, req, {
level: 'error',
event: 'getUnifiedFeed',
message: error.message,
data: { error },
});
res.status(error.statusCode || 500).json({ res.status(error.statusCode || 500).json({
success: false, success: false,
message: error.message, message: error.message,
@ -80,25 +106,59 @@ class NewsroomController extends SiteController {
} }
async getFeedView (req, res, next) { async getFeedView (req, res, next) {
const { feed: feedService } = this.dtp.services; const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try { try {
res.locals.pagination = this.getPaginationParameters(req, 10); res.locals.pagination = this.getPaginationParameters(req, 10);
res.locals.newsroom = await feedService.getFeedEntries(res.locals.feed, res.locals.pagination); res.locals.newsroom = await feedService.getFeedEntries(res.locals.feed, res.locals.pagination);
loganService.sendRequestEvent(module.exports, req, {
level: 'info',
event: 'getFeedView',
data: {
feed: {
_id: res.locals.feed._id,
title: res.locals.feed.title,
},
},
});
res.render('newsroom/feed-view'); res.render('newsroom/feed-view');
} catch (error) { } catch (error) {
this.log.error('failed to present newsroom home', { error }); loganService.sendRequestEvent(module.exports, req, {
level: 'error',
event: 'getFeedView',
message: error.message,
data: { error },
});
return next(error); return next(error);
} }
} }
async getHome (req, res, next) { async getHome (req, res, next) {
const { feed: feedService } = this.dtp.services; const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try { try {
res.locals.pagination = this.getPaginationParameters(req, 12); res.locals.pagination = this.getPaginationParameters(req, 12);
res.locals.newsroom = await feedService.getFeeds(res.locals.pagination, { withEntries: true }); res.locals.newsroom = await feedService.getFeeds(res.locals.pagination, { withEntries: true });
loganService.sendRequestEvent(module.exports, req, {
level: 'info',
event: 'getHome',
});
res.render('newsroom/index'); res.render('newsroom/index');
} catch (error) { } catch (error) {
this.log.error('failed to present newsroom home', { error }); loganService.sendRequestEvent(module.exports, req, {
level: 'error',
event: 'getHome',
message: error.message,
data: { error },
});
return next(error); return next(error);
} }
} }

@ -11,7 +11,8 @@ block content
.uk-width-expand .uk-width-expand
h1.uk-margin-remove #{site.name} Newsroom h1.uk-margin-remove #{site.name} Newsroom
.uk-width-auto .uk-width-auto
a(href="/newsroom/feed").uk-button.dtp-button-primary.uk-button-small.uk-border-rounded View All a(href="/newsroom/feed").uk-button.dtp-button-primary.uk-button-small.uk-border-rounded
span View All
if Array.isArray(newsroom.feeds) && (newsroom.feeds.length > 0) if Array.isArray(newsroom.feeds) && (newsroom.feeds.length > 0)
div(uk-grid).uk-grid-match div(uk-grid).uk-grid-match

@ -293,15 +293,20 @@ module.exports = {
* NewsroomController * NewsroomController
*/ */
newsroom: { newsroom: {
getUnifiedFeed: {
total: 15,
expire: ONE_MINUTE,
message: 'You are fetching the unified feed too quickly',
},
getFeedView: { getFeedView: {
total: 5, total: 15,
expire: ONE_MINUTE, expire: ONE_MINUTE,
message: 'You are reading newsletters too quickly', message: 'You are fetching news feeds too quickly',
}, },
getIndex: { getIndex: {
total: 60, total: 60,
expire: ONE_MINUTE, expire: ONE_MINUTE,
message: 'You are fetching newsletters too quickly', message: 'You are fetching the newsroom too quickly',
}, },
}, },

Loading…
Cancel
Save