diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2017-10-15 19:00:56 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2017-10-15 19:00:56 -0700 |
commit | b14ec9a9282cb49951b790ce1b48b1a078616926 (patch) | |
tree | deada14d4a407de18812d0e72c32136a2de2caa5 /src/main/java/com/p4square/grow/backend | |
parent | 79b8aacbb7b347bba9d14b1332666e7263a3a058 (diff) |
Refactor Chapter Ordering Logic20171015
The bug impacting the CCB integration was due to the "Introduction"
chapter having a higher "score" than every other chapter. It was a
mistake to use Score to compared chapter progress, particularly since
there are more chapters than scores.
This change gathers the chapter ordering logic, which was scattered
throughout the code into a new Chapters enum. Playlist and Chapter now
use Chapters as a key, instead of loose strings. Same for the
ProgressReporter interface.
Diffstat (limited to 'src/main/java/com/p4square/grow/backend')
-rw-r--r-- | src/main/java/com/p4square/grow/backend/resources/TrainingRecordResource.java | 32 |
1 files changed, 8 insertions, 24 deletions
diff --git a/src/main/java/com/p4square/grow/backend/resources/TrainingRecordResource.java b/src/main/java/com/p4square/grow/backend/resources/TrainingRecordResource.java index 51ba56a..cec4328 100644 --- a/src/main/java/com/p4square/grow/backend/resources/TrainingRecordResource.java +++ b/src/main/java/com/p4square/grow/backend/resources/TrainingRecordResource.java @@ -6,13 +6,11 @@ package com.p4square.grow.backend.resources; import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.HashMap; +import java.util.*; import com.fasterxml.jackson.databind.ObjectMapper; +import com.p4square.grow.model.*; import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.resource.ServerResource; @@ -25,19 +23,12 @@ import org.apache.log4j.Logger; import com.p4square.grow.backend.GrowBackend; -import com.p4square.grow.model.Chapter; -import com.p4square.grow.model.Playlist; -import com.p4square.grow.model.VideoRecord; -import com.p4square.grow.model.TrainingRecord; - import com.p4square.grow.provider.CollectionProvider; import com.p4square.grow.provider.JsonEncodedProvider; import com.p4square.grow.provider.Provider; import com.p4square.grow.provider.ProvidesAssessments; import com.p4square.grow.provider.ProvidesTrainingRecords; -import com.p4square.grow.model.Score; - /** * * @author Jesse Morgan <jesse@jesterpm.net> @@ -199,7 +190,7 @@ public class TrainingRecordResource extends ServerResource { */ private void skipAssessedChapters(String userId, TrainingRecord record) { // Get the user's score. - Score assessedScore = new Score(0, 0); + final Score assessedScore; try { assessedScore = getAssessedScore(userId); @@ -211,19 +202,12 @@ public class TrainingRecordResource extends ServerResource { // Mark the correct videos as not required. Playlist playlist = record.getPlaylist(); - for (Map.Entry<String, Chapter> entry : playlist.getChaptersMap().entrySet()) { - String chapterId = entry.getKey(); + for (Map.Entry<Chapters, Chapter> entry : playlist.getChaptersMap().entrySet()) { + Chapters chapterId = entry.getKey(); Chapter chapter = entry.getValue(); - boolean required; - - if ("introduction".equals(chapter)) { - // Introduction chapter is always required - required = true; - - } else { - // Chapter required if the floor of the score is <= the chapter's numeric value. - required = assessedScore.floor() <= Score.numericScore(chapterId); - } + boolean required = chapterId.toScore() + .map(s -> assessedScore.floor() <= s) + .orElse(true); if (!required) { for (VideoRecord video : chapter.getVideos().values()) { |