215 lines
5.9 KiB
JavaScript
215 lines
5.9 KiB
JavaScript
|
// import React from 'react';
|
||
|
// import { renderToString } from 'react-dom/server';
|
||
|
// // import { StaticRouter } from 'react-router-dom';
|
||
|
// import { has } from 'lodash';
|
||
|
import debug from 'debug';
|
||
|
|
||
|
// import NewsApp from '../../news/NewsApp';
|
||
|
|
||
|
const routerLog = debug('fcc:boot:news:router');
|
||
|
const apiLog = debug('fcc:boot:news:api');
|
||
|
|
||
|
export default function newsBoot(app) {
|
||
|
// const router = app.loopback.Router();
|
||
|
// const api = app.loopback.Router();
|
||
|
|
||
|
// router.get('/n', (req, res) => res.redirect('/news'));
|
||
|
// router.get('/n/:shortId', createShortLinkHandler(app));
|
||
|
|
||
|
// router.get('/news', serveNewsApp);
|
||
|
// router.get('/news/*', serveNewsApp);
|
||
|
|
||
|
// api.post('/p', createPopularityHandler(app));
|
||
|
|
||
|
// app.use(api);
|
||
|
// app.use(router);
|
||
|
}
|
||
|
|
||
|
// function serveNewsApp(req, res) {
|
||
|
// const context = {};
|
||
|
// const markup = renderToString(
|
||
|
// <StaticRouter basename='/news' context={context} location={req.url}>
|
||
|
// <NewsApp />
|
||
|
// </StaticRouter>
|
||
|
// );
|
||
|
// if (context.url) {
|
||
|
// routerLog('redirect found in `renderToString`');
|
||
|
// // 'client-side' routing hit on a redirect
|
||
|
// return res.redirect(context.url);
|
||
|
// }
|
||
|
// routerLog('news markup sending');
|
||
|
// return res.render('layout-news', { title: 'News | freeCodeCamp', markup });
|
||
|
// }
|
||
|
|
||
|
// function createShortLinkHandler(app) {
|
||
|
// const { Article } = app.models;
|
||
|
|
||
|
// const referralHandler = createRerralHandler(app);
|
||
|
|
||
|
// return function shortLinkHandler(req, res, next) {
|
||
|
// const { query, user } = req;
|
||
|
// const { shortId } = req.params;
|
||
|
|
||
|
// referralHandler(query, shortId, !!user);
|
||
|
|
||
|
// routerLog(req.origin);
|
||
|
// routerLog(query.refsource);
|
||
|
// if (!shortId) {
|
||
|
// return res.redirect('/news');
|
||
|
// }
|
||
|
// routerLog('shortId', shortId);
|
||
|
// return Article.findOne(
|
||
|
// {
|
||
|
// where: {
|
||
|
// or: [{ shortId }, { slugPart: shortId }]
|
||
|
// }
|
||
|
// },
|
||
|
// (err, article) => {
|
||
|
// if (err) {
|
||
|
// next(err);
|
||
|
// }
|
||
|
// if (!article) {
|
||
|
// return res.redirect('/news');
|
||
|
// }
|
||
|
// const {
|
||
|
// slugPart,
|
||
|
// shortId,
|
||
|
// author: { username }
|
||
|
// } = article;
|
||
|
// const slug = `/news/${username}/${slugPart}--${shortId}`;
|
||
|
// return res.redirect(slug);
|
||
|
// }
|
||
|
// );
|
||
|
// };
|
||
|
// }
|
||
|
|
||
|
// function createPopularityHandler(app) {
|
||
|
// const { Article, Popularity } = app.models;
|
||
|
|
||
|
// return function handlePopularityStats(req, res, next) {
|
||
|
// const { body, user } = req;
|
||
|
|
||
|
// if (
|
||
|
// !has(body, 'event') ||
|
||
|
// !has(body, 'timestamp') ||
|
||
|
// !has(body, 'shortId')
|
||
|
// ) {
|
||
|
// console.warn('Popularity event recieved from client is malformed');
|
||
|
// console.log(JSON.stringify(body, null, 2));
|
||
|
// // sending 200 because the client shouldn't care for this
|
||
|
// return res.sendStatus(200);
|
||
|
// }
|
||
|
// res.sendStatus(200);
|
||
|
// const { shortId } = body;
|
||
|
// apiLog('shortId', shortId);
|
||
|
// const populartiyUpdate = {
|
||
|
// ...body,
|
||
|
// byAuthenticatedUser: !!user
|
||
|
// };
|
||
|
// Popularity.findOne({ where: { articleId: shortId } }, (err, popularity) => {
|
||
|
// if (err) {
|
||
|
// apiLog(err);
|
||
|
// return next(err);
|
||
|
// }
|
||
|
// if (popularity) {
|
||
|
// return popularity.updateAttribute(
|
||
|
// 'events',
|
||
|
// [populartiyUpdate, ...popularity.events],
|
||
|
// err => {
|
||
|
// if (err) {
|
||
|
// apiLog(err);
|
||
|
// return next(err);
|
||
|
// }
|
||
|
// return apiLog('poplarity updated');
|
||
|
// }
|
||
|
// );
|
||
|
// }
|
||
|
// return Popularity.create(
|
||
|
// {
|
||
|
// events: [populartiyUpdate],
|
||
|
// articleId: shortId
|
||
|
// },
|
||
|
// err => {
|
||
|
// if (err) {
|
||
|
// apiLog(err);
|
||
|
// return next(err);
|
||
|
// }
|
||
|
// return apiLog('poulartiy created');
|
||
|
// }
|
||
|
// );
|
||
|
// });
|
||
|
// return body.event === 'view'
|
||
|
// ? Article.findOne({ where: { shortId } }, (err, article) => {
|
||
|
// if (err) {
|
||
|
// apiLog(err);
|
||
|
// next(err);
|
||
|
// }
|
||
|
// return article.updateAttributes(
|
||
|
// { viewCount: article.viewCount + 1 },
|
||
|
// err => {
|
||
|
// if (err) {
|
||
|
// apiLog(err);
|
||
|
// return next(err);
|
||
|
// }
|
||
|
// return apiLog('article views updated');
|
||
|
// }
|
||
|
// );
|
||
|
// })
|
||
|
// : null;
|
||
|
// };
|
||
|
// }
|
||
|
|
||
|
// function createRerralHandler(app) {
|
||
|
// const { Popularity } = app.models;
|
||
|
|
||
|
// return function referralHandler(query, shortId, byAuthenticatedUser) {
|
||
|
// if (!query.refsource) {
|
||
|
// return null;
|
||
|
// }
|
||
|
// const eventUpdate = {
|
||
|
// event: `referral - ${query.refsource}`,
|
||
|
// timestamp: new Date(Date.now()),
|
||
|
// byAuthenticatedUser
|
||
|
// };
|
||
|
// return Popularity.findOne(
|
||
|
// { where: { articleId: shortId } },
|
||
|
// (err, popularity) => {
|
||
|
// if (err) {
|
||
|
// console.error(
|
||
|
// 'Failed finding a `Popularity` in a referral handler',
|
||
|
// err
|
||
|
// );
|
||
|
// return null;
|
||
|
// }
|
||
|
|
||
|
// if (popularity) {
|
||
|
// return popularity.updateAttribute(
|
||
|
// 'events',
|
||
|
// [eventUpdate, ...popularity.events],
|
||
|
// err => {
|
||
|
// if (err) {
|
||
|
// console.error(
|
||
|
// 'Failed in updating the `events` attribute of a `popularity`',
|
||
|
// err
|
||
|
// );
|
||
|
// }
|
||
|
// }
|
||
|
// );
|
||
|
// }
|
||
|
// return Popularity.create(
|
||
|
// {
|
||
|
// events: [eventUpdate],
|
||
|
// articleId: shortId
|
||
|
// },
|
||
|
// err => {
|
||
|
// if (err) {
|
||
|
// return console.error('Failed creating a new `Popularity`', err);
|
||
|
// }
|
||
|
// return apiLog('poulartiy created');
|
||
|
// }
|
||
|
// );
|
||
|
// }
|
||
|
// );
|
||
|
// };
|
||
|
// }
|