summaryrefslogtreecommitdiff
path: root/src/main/java/com/p4square/grow/backend
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2017-10-15 19:00:56 -0700
committerJesse Morgan <jesse@jesterpm.net>2017-10-15 19:00:56 -0700
commitb14ec9a9282cb49951b790ce1b48b1a078616926 (patch)
treedeada14d4a407de18812d0e72c32136a2de2caa5 /src/main/java/com/p4square/grow/backend
parent79b8aacbb7b347bba9d14b1332666e7263a3a058 (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.java32
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()) {