gonito/Handler/Course.hs

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
}