From 07c5cc77b0d48252f7c2f67700b747c082c19f9d Mon Sep 17 00:00:00 2001 From: Khaled Garbaya Date: Thu, 28 Sep 2017 11:25:25 +0200 Subject: [PATCH] fix(course): fix non resolved lessons --- package.json | 3 +- routes/courses.js | 8 +++-- services/contentful.js | 37 ++++++++++++++--------- views/course.pug | 10 +++--- views/mixins/_lessonModuleCodeSnippet.pug | 1 + 5 files changed, 36 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 56c97ce..0de331a 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "postcss-cssnext": "^3.0.2", "postcss-import": "^11.0.0", "postcss-reporter": "^5.0.0", - "postcss-url": "^7.1.2" + "postcss-url": "^7.1.2", + "pug-lint": "^2.5.0" } } diff --git a/routes/courses.js b/routes/courses.js index ff58c94..fe02643 100644 --- a/routes/courses.js +++ b/routes/courses.js @@ -33,9 +33,11 @@ router.get('/categories/:category', async function (req, res, next) { /* GET course detail. */ router.get('/:slug', async function (req, res, next) { - let course = {} - course = await getCourse(req.params.slug) - res.render('course', {title: course.fields.title, course}) + let course = await getCourse(req.params.slug) + const lessons = course.fields.lessons + const lessonIndex = lessons.findIndex((lesson) => lesson.fields.slug === req.params.lslug) + const lesson = lessons[lessonIndex] + res.render('course', {title: course.fields.title, course, lesson, lessons, lessonIndex}) }) /* GET course lesson detail. */ diff --git a/services/contentful.js b/services/contentful.js index 70b548c..1128661 100644 --- a/services/contentful.js +++ b/services/contentful.js @@ -1,47 +1,54 @@ const { createClient } = require('contentful') -let client = null -let previewClient = null +let cdaClient = null +let cpaClient = null exports.initClient = (config = {space: process.env.CF_SPACE, accessToken: process.env.CF_ACCESS_TOKEN}) => { - client = createClient(config) - previewClient = createClient({...config, host: 'preview.contentful.com'}) + cdaClient = createClient(config) + cpaClient = createClient({...config, host: 'preview.contentful.com'}) } -exports.getCourses = () => { +exports.getCourses = (locale = 'en-US', api = `cda`) => { // to get all the courses we simply request from Contentful all the entries // with the content_type `course` - return client.getEntries({content_type: 'course', include: 10}) + const client = api === 'cda' ? cdaClient : cpaClient + return client.getEntries({content_type: 'course', locale, include: 10}) .then((response) => response.items) } -exports.getLandingPage = () => { +exports.getLandingPage = (locale = 'en-US', api = `cda`) => { // our Home page is fully configureable via contentful - return client.getEntries({content_type: 'landingPage', 'fields.slug': 'contentful-university', include: 10}) + const client = api === 'cda' ? cdaClient : cpaClient + return client.getEntries({content_type: 'landingPage', locale, 'fields.slug': 'contentful-university', include: 10}) .then((response) => response.items[0]) } -exports.getCourse = (slug) => { +exports.getCourse = (slug, locale = 'en-US', api = `cda`) => { // the SDK support link resolution only when you request the collection endpoint // That's why we are using getEntries with a query instead of getEntry(entryId) // make sure to specify the content_type whenever you want to perform a query - return client.getEntries({content_type: 'course', 'fields.slug': slug, include: 10}) + const client = api === 'cda' ? cdaClient : cpaClient + return client.getEntries({content_type: 'course', 'fields.slug': slug, locale, include: 10}) .then((response) => response.items[0]) } -exports.getLessons = (courseId) => { +exports.getLessons = (courseId, locale = 'en-US', api = `cda`) => { // TODO } -exports.getCategories = () => { - return client.getEntries({content_type: 'category'}) +exports.getCategories = (locale = 'en-US', api = `cda`) => { + const client = api === 'cda' ? cdaClient : cpaClient + return client.getEntries({content_type: 'category', locale}) .then((response) => response.items) } -exports.getCoursesByCategory = (category) => { +exports.getCoursesByCategory = (category, locale = 'en-US', api = `cda`) => { + const client = api === 'cda' ? cdaClient : cpaClient return client.getEntries({ content_type: 'course', - 'fields.category.sys.contentType.sys.id': category + 'fields.category.sys.contentType.sys.id': category, + locale, + include: 10 }) .then((response) => response.items) } diff --git a/views/course.pug b/views/course.pug index c97fa28..6d618c0 100644 --- a/views/course.pug +++ b/views/course.pug @@ -10,16 +10,18 @@ block content ul li a.active(href=`/courses/${course.fields.slug}`) Course overview - each lesson in course.fields.lessons - li - a(href=`/courses/${course.fields.slug}/lessons/${lesson.fields.slug}`) #{lesson.fields.title} + each l in course.fields.lessons + if l.fields + li + a(href=`/courses/${course.fields.slug}/lessons/${l.fields.slug}`) #{l.fields.title} section.wrapper-with-sidebar__content h1= course.fields.title if lesson +lesson(lesson) if lessonIndex + 1< lessons.length - a.cta(href=`/courses/${course.fields.slug}/lessons/${lessons[lessonIndex + 1].fields.slug}`) View next lesson + if lessons[lessonIndex + 1].fields + a.cta(href=`/courses/${course.fields.slug}/lessons/${lessons[lessonIndex + 1].fields.slug}`) View next lesson else p !{helpers.markdown(course.fields.description)} a.cta(href=`/courses/${course.fields.slug}/lessons/${course.fields.lessons[0].fields.slug}`) Start course diff --git a/views/mixins/_lessonModuleCodeSnippet.pug b/views/mixins/_lessonModuleCodeSnippet.pug index b574751..7f1e204 100644 --- a/views/mixins/_lessonModuleCodeSnippet.pug +++ b/views/mixins/_lessonModuleCodeSnippet.pug @@ -19,3 +19,4 @@ mixin lessonModuleCodeSnippet(module) code.ruby= module.fields.ruby pre.lesson-module-code__swift code.swift= module.fields.swift +