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 ( ) {
const { dtp } = this;
const { limiter: limiterService } = dtp.services;
const limiterConfig = limiterService.config.newsroom;
const router = express.Router();
dtp.app.use('/newsroom', router);
@ -28,21 +29,27 @@ class NewsroomController extends SiteController {
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',
limiterService.createMiddleware(limiterService.config.newsroom.getFeedView),
limiterService.createMiddleware(limiterConfig.getFeedView),
this.getFeedView.bind(this),
);
router.get('/',
limiterService.createMiddleware(limiterService.config.newsletter.getIndex),
limiterService.createMiddleware(limiterConfig.getIndex),
this.getHome.bind(this),
);
}
async populateFeedId (req, res, next, feedId) {
const { feed: feedService } = this.dtp.services;
const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try {
res.locals.feed = await feedService.getById(feedId);
if (!res.locals.feed) {
@ -50,17 +57,31 @@ class NewsroomController extends SiteController {
}
return next();
} 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);
}
}
async getUnifiedFeed (req, res) {
const { feed: feedService } = this.dtp.services;
const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try {
res.locals.pagination = this.getPaginationParameters(req, 20);
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) {
case 'json':
res.status(200).json(res.locals.newsroom);
@ -71,7 +92,12 @@ class NewsroomController extends SiteController {
break;
}
} 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({
success: false,
message: error.message,
@ -80,25 +106,59 @@ class NewsroomController extends SiteController {
}
async getFeedView (req, res, next) {
const { feed: feedService } = this.dtp.services;
const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try {
res.locals.pagination = this.getPaginationParameters(req, 10);
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');
} 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);
}
}
async getHome (req, res, next) {
const { feed: feedService } = this.dtp.services;
const {
feed: feedService,
logan: loganService,
} = this.dtp.services;
try {
res.locals.pagination = this.getPaginationParameters(req, 12);
res.locals.newsroom = await feedService.getFeeds(res.locals.pagination, { withEntries: true });
loganService.sendRequestEvent(module.exports, req, {
level: 'info',
event: 'getHome',
});
res.render('newsroom/index');
} 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);
}
}

@ -11,7 +11,8 @@ block content
.uk-width-expand
h1.uk-margin-remove #{site.name} Newsroom
.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)
div(uk-grid).uk-grid-match

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

Loading…
Cancel
Save