Skip to content

Commit 0619fd5

Browse files
committed
fix: added back blog js
1 parent adc8090 commit 0619fd5

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

src/server/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import mockDocuSignFactory from './__mocks__/docu-sign-mock';
2929
import recruitCRMRouter from './routes/recruitCRM';
3030
import mmLeaderboardRouter from './routes/mmLeaderboard';
3131
import feedsRouter from './routes/feeds';
32+
import blogRouter from './routes/blog';
3233

3334
/* Dome API for topcoder communities */
3435
import tcCommunitiesDemoApi from './tc-communities';
@@ -163,6 +164,7 @@ async function onExpressJsSetup(server) {
163164

164165
const checkAuthorizationHeader = (req, res, next) => {
165166
if (req.headers.authorization !== `ApiKey ${config.SERVER_API_KEY}`) {
167+
console.log('checkAuthorizationHeader failed');
166168
return res.status(403).end();
167169
}
168170
return next();
@@ -277,6 +279,7 @@ async function onExpressJsSetup(server) {
277279
server.use('/api/recruit', recruitCRMRouter);
278280
server.use('/api/mml', mmLeaderboardRouter);
279281
server.use('/api/feeds', feedsRouter);
282+
server.use('/api/blog', blogRouter);
280283

281284
// serve demo api
282285
server.use(

src/server/routes/blog.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import express from 'express';
2+
3+
import getBlogs from '../services/blog';
4+
5+
const router = express.Router();
6+
7+
router.use((req, res, next) => {
8+
res.set('Access-Control-Allow-Origin', '*');
9+
next();
10+
});
11+
12+
router.get('/', async (req, res, next) => {
13+
try {
14+
const limit = Number(req.query.limit);
15+
const { category } = req.query;
16+
res.send(await getBlogs(limit, category));
17+
} catch (err) { next(err); }
18+
});
19+
20+
export default router;

src/server/services/blog.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Service that fetches blog rss and parses it
3+
*/
4+
import RSSParser from 'rss-parser';
5+
import { config } from 'topcoder-react-utils';
6+
import { logger } from 'topcoder-react-lib';
7+
import _ from 'lodash';
8+
9+
/**
10+
* Gets blogs and returns as a list
11+
* @param {number} limit The number of blogs to return
12+
* @param {string} category blog category to fetch
13+
* @return {Promise} Resulting blogs.
14+
*/
15+
export default async function getBlogs(limit, category = null) {
16+
try {
17+
const feed = await fetch(config.URL.BLOG_FEED);
18+
const rss = await feed.text();
19+
const feedBlogs = new RSSParser().parseString(rss.replace('<![CDATA[]]>', ''));
20+
const blogs = await feedBlogs;
21+
const filteredBlogs = category
22+
? blogs.items.filter(
23+
blog => _.get(blog, 'categories', []).map(c => c.trim()).includes(category),
24+
) : blogs.items;
25+
return filteredBlogs
26+
.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate))
27+
.slice(0, limit);
28+
} catch (e) {
29+
logger.error('getBlogs error', e);
30+
return [];
31+
}
32+
}

0 commit comments

Comments
 (0)