forked from filipg/gonito
Add page for a course
Also added a relation between courses and challenges
This commit is contained in:
parent
e3981717c9
commit
36ad24dba5
@ -63,6 +63,7 @@ import Handler.Evaluate
|
||||
import Handler.Swagger
|
||||
import Handler.Team
|
||||
import Handler.Announcements
|
||||
import Handler.Course
|
||||
|
||||
-- This line actually creates our YesodDispatch instance. It is the second half
|
||||
-- of the call to mkYesodData which occurs in Foundation.hs. Please see the
|
||||
|
@ -233,6 +233,8 @@ instance Yesod App where
|
||||
|
||||
isAuthorized (CompareFormR _ _) _ = regularAuthorization
|
||||
|
||||
isAuthorized (CourseR _) _ = regularAuthorization
|
||||
|
||||
isAuthorized MyTeamsR _ = isTrustedAuthorized
|
||||
isAuthorized CreateTeamR _ = isTrustedAuthorized
|
||||
|
||||
|
38
Handler/Course.hs
Normal file
38
Handler/Course.hs
Normal file
@ -0,0 +1,38 @@
|
||||
module Handler.Course where
|
||||
|
||||
import Import
|
||||
|
||||
import Handler.Shared
|
||||
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
|
||||
}
|
@ -212,6 +212,10 @@ Teacher
|
||||
user UserId
|
||||
course CourseId
|
||||
UniqueTeacherCourse user course
|
||||
CourseChallenge
|
||||
challenge ChallengeId
|
||||
course CourseId
|
||||
UniqueCourseChallenge challenge course
|
||||
-- for "KPI" dashboard
|
||||
Indicator
|
||||
test TestId
|
||||
|
@ -15,6 +15,7 @@
|
||||
/test-progress/#Int/#Int TestProgressR GET
|
||||
/api/test-progress/#Int/#Int TestProgressJsonR GET
|
||||
/list-challenges ListChallengesR GET
|
||||
/course/#Text CourseR GET
|
||||
|
||||
/test-announcements TestAnnouncementsR GET
|
||||
|
||||
|
@ -65,6 +65,7 @@ library
|
||||
Handler.Team
|
||||
Handler.Announcements
|
||||
Web.Announcements
|
||||
Handler.Course
|
||||
|
||||
if flag(dev) || flag(library-only)
|
||||
cpp-options: -DDEVELOPMENT
|
||||
|
3
templates/course.hamlet
Normal file
3
templates/course.hamlet
Normal file
@ -0,0 +1,3 @@
|
||||
<h1>#{courseName $ courseInfoCourse courseInfo}
|
||||
|
||||
^{listChallengesCore $ courseInfoChallenges courseInfo}
|
Loading…
Reference in New Issue
Block a user