From 200a8ae2f14610c5dfb1cb0cb574a8fc76d9521b Mon Sep 17 00:00:00 2001 From: Khaled Garbaya Date: Tue, 26 Sep 2017 15:24:12 +0200 Subject: [PATCH] feat(courses): Add Categories listing --- routes/courses.js | 20 ++++++++++++++++++-- routes/index.js | 1 - services/contentful.js | 10 ++++++++-- views/courses.pug | 5 ++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/routes/courses.js b/routes/courses.js index 4c82578..6f7f4f9 100644 --- a/routes/courses.js +++ b/routes/courses.js @@ -1,5 +1,5 @@ const express = require('express') -const {getCourses, getCourse} = require('./../services/contentful') +const {getCourses, getCourse, getCategories, getCoursesByCategory} = require('./../services/contentful') const router = express.Router() @@ -7,12 +7,28 @@ const router = express.Router() router.get('/', async function (req, res, next) { // we get all the entries with the content type `course` let courses = [] + let categories = [] try { courses = await getCourses() + categories = await getCategories() } catch (e) { console.log('Error ', e) } - res.render('courses', { title: 'Courses', courses: courses.items }) + res.render('courses', { title: 'Courses', categories, courses }) +}) + +/* GET courses listing. */ +router.get('/categories/:category', async function (req, res, next) { + // we get all the entries with the content type `course` + let courses = [] + let categories = [] + try { + courses = await getCoursesByCategory(req.params.category) + categories = await getCategories() + } catch (e) { + console.log('Error ', e) + } + res.render('courses', { title: 'Courses', categories, courses }) }) /* GET course detail. */ diff --git a/routes/index.js b/routes/index.js index eb68a34..7d7e9c3 100644 --- a/routes/index.js +++ b/routes/index.js @@ -5,7 +5,6 @@ const router = express.Router() /* GET home page. */ router.get('/', async function (req, res, next) { const landingPage = await getLandingPage() - console.log(landingPage.fields.contentModules[1].fields) res.render('index', { landingPage }) }) diff --git a/services/contentful.js b/services/contentful.js index 6e4300d..f783c65 100644 --- a/services/contentful.js +++ b/services/contentful.js @@ -12,6 +12,7 @@ exports.getCourses = () => { // to get all the courses we simply request from Contentful all the entries // with the content_type `course` return client.getEntries({content_type: 'course'}) + .then((response) => response.items) } exports.getLandingPage = () => { @@ -33,10 +34,15 @@ exports.getLessons = (courseId) => { } exports.getCategories = () => { - // TODO + return client.getEntries({content_type: 'category'}) + .then((response) => response.items) } exports.getCoursesByCategory = (category) => { - // TODO + return client.getEntries({ + content_type: 'course', + 'fields.category.sys.contentType.sys.id': category + }) + .then((response) => response.items) } diff --git a/views/courses.pug b/views/courses.pug index db929e9..23ab070 100644 --- a/views/courses.pug +++ b/views/courses.pug @@ -3,6 +3,9 @@ extends layout include mixins/_courseCard block content - h1= title + ul + each category in categories + li + a(href=`/courses/categories/${category.sys.id}`) #{category.fields.title} each course in courses +courseCard(course)