Browse Source

backport Unified Feed from Sites to Base

develop
Rob Colbert 11 months ago
parent
commit
b7b868257f
  1. 60
      app/controllers/newsroom.js
  2. 9
      app/views/newsroom/index.pug
  3. 27
      app/views/newsroom/unified-feed.pug
  4. 11
      config/limiter.js

60
app/controllers/newsroom.js

@ -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,19 +29,27 @@ class NewsroomController extends SiteController {
router.param('feedId', this.populateFeedId.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) {
@ -48,11 +57,54 @@ 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,
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);
break;
default:
res.render('newsroom/unified-feed');
break;
}
} catch (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,
});
}
}
async getFeedView (req, res, next) {
const { feed: feedService } = this.dtp.services;
try {

9
app/views/newsroom/index.pug

@ -4,7 +4,14 @@ block content
section.uk-section.uk-section-default.uk-section-small
.uk-container
h1 #{site.name} Newsroom
.uk-margin
div(uk-grid).uk-flex-middle
.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
span View All
if Array.isArray(newsroom.feeds) && (newsroom.feeds.length > 0)
div(uk-grid).uk-grid-match
each feed in newsroom.feeds

27
app/views/newsroom/unified-feed.pug

@ -0,0 +1,27 @@
extends ../layouts/main
block content
include ../components/pagination-bar
section.uk-section.uk-section-default
.uk-container
article.uk-article
.uk-margin
h1.uk-article-title.uk-margin-remove #{site.name} News Feed
.uk-text-bold #{formatCount(newsroom.totalFeedEntryCount)} articles indexed by #{site.name} in one chronological feed.
.uk-margin
if Array.isArray(newsroom.entries) && (newsroom.entries.length > 0)
ul.uk-list.uk-list-divider
each entry in newsroom.entries
li
.uk-text-large.uk-text-bold.uk-margin-small
a(href= entry.link, target="shing_reader")= entry.title
.uk-margin-small= entry.description
.uk-text-small source: #[a(href= entry.feed.link, target="_blank")= entry.feed.title]
else
div There are no news feed entries.
.uk-margin
+renderPaginationBar(`/newsroom/feed`, newsroom.totalFeedEntryCount)

11
config/limiter.js

@ -245,15 +245,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