From 1e94188333ba1738a946d88eb6f01b5a6fc37d08 Mon Sep 17 00:00:00 2001 From: Khaled Garbaya Date: Mon, 23 Oct 2017 14:40:20 +0200 Subject: [PATCH] refactor: refactor routes --- app.js | 16 +++------------ routes/about.js | 14 ++++++------- routes/categories.js | 9 ++------- routes/courses.js | 47 ++++++++++++++++++-------------------------- routes/index.js | 25 +++++++++++++++++++++++ routes/settings.js | 12 ++++------- routes/sitemap.js | 8 ++------ 7 files changed, 61 insertions(+), 70 deletions(-) diff --git a/app.js b/app.js index 0ca874c..a9731de 100644 --- a/app.js +++ b/app.js @@ -7,12 +7,7 @@ const logger = require('morgan') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') -const index = require('./routes/index') -const courses = require('./routes/courses') -const categories = require('./routes/categories') -const about = require('./routes/about') -const settings = require('./routes/settings') -const sitemap = require('./routes/sitemap') +const routes = require('./routes/index') const { initClient, getSpace } = require('./services/contentful') const breadcrumb = require('./lib/breadcrumb') @@ -36,7 +31,7 @@ app.use(async function (req, res, next) { space: process.env.CF_SPACE, cda: process.env.CF_ACCESS_TOKEN, cpa: process.env.CF_PREVIEW_ACCESS_TOKEN, - editorialFeatures: false, + editorialFeatures: true, ...req.cookies.theExampleAppSettings } @@ -108,12 +103,7 @@ app.use(async function (req, res, next) { next() }) -app.use('/', index) -app.use('/courses', courses) -app.use('/categories', categories) -app.use('/about', about) -app.use('/settings', settings) -app.use('/sitemap', sitemap) +app.use('/', routes) // catch 404 and forward to error handler app.use(function (req, res, next) { diff --git a/routes/about.js b/routes/about.js index fb4d8d1..ee8ca10 100644 --- a/routes/about.js +++ b/routes/about.js @@ -1,12 +1,10 @@ -const express = require('express') const { getLandingPage } = require('../services/contentful') -const { catchErrors } = require('../handlers/errorHandlers') -const router = express.Router() -/* GET the about page. */ -router.get('/', catchErrors(async function (req, res, next) { - const landingPage = await getLandingPage('about', res.locals.currentLocale.code, res.locals.currentApi.id) +exports.getAbout = async (req, res, next) => { + const landingPage = await getLandingPage('about', + res.locals.currentLocale.code, + res.locals.currentApi.id + ) res.render('landingPage', { title: 'About', landingPage }) -})) +} -module.exports = router diff --git a/routes/categories.js b/routes/categories.js index af9de82..c1fb132 100644 --- a/routes/categories.js +++ b/routes/categories.js @@ -1,10 +1,5 @@ -const express = require('express') -const { catchErrors } = require('../handlers/errorHandlers') -const router = express.Router() - /* GET category listing. */ -router.get('/', catchErrors(async function (req, res, next) { +exports.getCategories = async (req, res, next) => { res.render('categories', { title: 'Categories' }) -})) +} -module.exports = router diff --git a/routes/courses.js b/routes/courses.js index 39132ca..9b037c4 100644 --- a/routes/courses.js +++ b/routes/courses.js @@ -1,20 +1,28 @@ -const express = require('express') const {getCourses, getCourse, getCategories, getCoursesByCategory} = require('./../services/contentful') -const { catchErrors } = require('../handlers/errorHandlers') -const router = express.Router() -/* GET courses listing. */ -router.get('/', catchErrors(async function (req, res, next) { +exports.getCourses = async (req, res, next) => { // we get all the entries with the content type `course` let courses = [] let categories = [] courses = await getCourses(res.locals.currentLocale.code, res.locals.currentApi.id) categories = await getCategories(res.locals.currentLocale.code, res.locals.currentApi.id) res.render('courses', { title: `All Courses (${courses.length})`, categories, courses }) -})) +} -/* GET courses listing by category. */ -router.get('/categories/:category', catchErrors(async function (req, res, next) { +exports.getCourse = async (req, res, next) => { + let course = await getCourse(req.params.slug, res.locals.currentLocale.code, res.locals.currentApi.id) + const lessons = course.fields.lessons + const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) + const lesson = lessons[lessonIndex] + const cookie = req.cookies.visitedLessons + let visitedLessons = cookie || [] + visitedLessons.push(course.sys.id) + visitedLessons = [...new Set(visitedLessons)] + res.cookie('visitedLessons', visitedLessons, { maxAge: 900000, httpOnly: true }) + res.render('course', {title: course.fields.title, course, lesson, lessons, lessonIndex, visitedLessons}) +} + +exports.getCoursesByCategory = async (req, res, next) => { // we get all the entries with the content type `course` filtered by a category let courses = [] let categories = [] @@ -27,26 +35,10 @@ router.get('/categories/:category', catchErrors(async function (req, res, next) console.log('Error ', e) } res.render('courses', { title: `${activeCategory.fields.title} (${courses.length})`, categories, courses }) -})) - -/* GET course detail. */ -const courseRoute = catchErrors(async function (req, res, next) { - let course = await getCourse(req.params.slug, res.locals.currentLocale.code, res.locals.currentApi.id) - const lessons = course.fields.lessons - const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) - const lesson = lessons[lessonIndex] - const cookie = req.cookies.visitedLessons - let visitedLessons = cookie || [] - visitedLessons.push(course.sys.id) - visitedLessons = [...new Set(visitedLessons)] - res.cookie('visitedLessons', visitedLessons, { maxAge: 900000, httpOnly: true }) - res.render('course', {title: course.fields.title, course, lesson, lessons, lessonIndex, visitedLessons}) -}) -router.get('/:slug', courseRoute) -router.get('/:slug/lessons', courseRoute) +} /* GET course lesson detail. */ -router.get('/:cslug/lessons/:lslug', catchErrors(async function (req, res, next) { +exports.getLesson = async (req, res, next) => { let course = await getCourse(req.params.cslug, res.locals.currentLocale.code, res.locals.currentApi.id) const lessons = course.fields.lessons const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) @@ -65,6 +57,5 @@ router.get('/:cslug/lessons/:lslug', catchErrors(async function (req, res, next) nextLesson, visitedLessons }) -})) +} -module.exports = router diff --git a/routes/index.js b/routes/index.js index 5755ea5..77ce2d5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,6 +1,11 @@ const express = require('express') const { getLandingPage } = require('../services/contentful') const { catchErrors } = require('../handlers/errorHandlers') +const { getCourses, getCourse, getLesson, getCourseByCategory } = require('./courses') +const { getSettings, postSettings } = require('./settings') +const { getCategories } = require('./categories') +const { getSitemap } = require('./sitemap') +const { getAbout } = require('./about') const router = express.Router() /* GET the home landing page. */ @@ -16,4 +21,24 @@ router.get('/', catchErrors(async function (req, res, next) { }) })) +/* Courses Routes */ +router.get('/courses', catchErrors(getCourses)) +router.get('/courses/categories/:category', catchErrors(getCourseByCategory)) +router.get('/courses/:slug', catchErrors(getCourse)) +router.get('/courses/:slug/lessons', catchErrors(getCourse)) +router.get('/courses/:cslug/lessons/:lslug', catchErrors(getLesson)) + +/* Settings Routes */ +router.get('/settings', catchErrors(getSettings)) +router.post('/settings', catchErrors(postSettings)) + +/* Categories Route */ +router.get('/categories', catchErrors(getCategories)) + +/* Sitemap Route */ +router.get('/sitemap', catchErrors(getSitemap)) + +/* About Route */ +router.get('/about', catchErrors(getAbout)) + module.exports = router diff --git a/routes/settings.js b/routes/settings.js index d4a9491..c47df00 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -1,8 +1,5 @@ -const express = require('express') const { createClient } = require('contentful') const { getSpace } = require('./../services/contentful') -const { catchErrors } = require('../handlers/errorHandlers') -const router = express.Router() async function renderSettings (res, opts) { // Get connectred space to display the space name on top of the settings @@ -24,15 +21,15 @@ async function renderSettings (res, opts) { } /* GET settings page. */ -router.get('/', catchErrors(async function (req, res, next) { +exports.getSettings = async (req, res, next) => { const { settings } = res.locals await renderSettings(res, { settings }) -})) +} /* POST settings page. */ -router.post('/', catchErrors(async function (req, res, next) { +exports.postSettings = async (req, res, next) => { const errorList = [] const { space, cda, cpa, editorialFeatures } = req.body const settings = { @@ -138,6 +135,5 @@ router.post('/', catchErrors(async function (req, res, next) { hasErrors: errorList.length > 0, success: errorList.length === 0 }) -})) +} -module.exports = router diff --git a/routes/sitemap.js b/routes/sitemap.js index 573ba01..f0ddf62 100644 --- a/routes/sitemap.js +++ b/routes/sitemap.js @@ -1,9 +1,5 @@ -const express = require('express') -const router = express.Router() - /* GET sitemap page. */ -router.get('/', function (req, res, next) { +exports.getSitemap = async (req, res, next) => { res.render('sitemap', { title: 'Sitemap' }) -}) +} -module.exports = router