forked from filipg/gonito
38 lines
1.1 KiB
Haskell
38 lines
1.1 KiB
Haskell
module Handler.Course where
|
|
|
|
import Import
|
|
|
|
import Handler.ListChallenges
|
|
|
|
import qualified Database.Esqueleto as E
|
|
import Database.Esqueleto ((^.))
|
|
|
|
|
|
data CourseInfo = CourseInfo {
|
|
courseInfoCourse :: Course,
|
|
courseInfoChallenges :: [Entity Challenge]
|
|
}
|
|
|
|
getCourseR :: Text -> Handler Html
|
|
getCourseR courseCode = do
|
|
courseInfo <- fetchCourseInfo courseCode
|
|
|
|
defaultLayout $ do
|
|
setTitle "Course"
|
|
$(widgetFile "course")
|
|
|
|
fetchCourseInfo :: Text -> Handler CourseInfo
|
|
fetchCourseInfo courseCode = do
|
|
(Entity courseId course) <- runDB $ getBy404 $ UniqueCourseCode courseCode
|
|
|
|
challenges <- runDB $ E.select $ E.from $ \(challenge, course_challenge) -> do
|
|
E.where_ (course_challenge ^. CourseChallengeCourse E.==. E.val courseId
|
|
E.&&. course_challenge ^. CourseChallengeChallenge E.==. challenge ^. ChallengeId)
|
|
E.orderBy [E.asc (challenge ^. ChallengeName)]
|
|
return challenge
|
|
|
|
return $ CourseInfo {
|
|
courseInfoCourse = course,
|
|
courseInfoChallenges = filter (\ch -> (challengeArchived $ entityVal ch) /= Just True) challenges
|
|
}
|