User plugin Text ident Text matrikelnummer Text Maybe email Text displayName Text UniqueAuthentication plugin ident UserAdmin user UserId school SchoolId UserLecturer user UserId school SchoolId UniqueSchoolLecturer user school StudyFeatures user UserId degree StudyDegreeId field StudyTermsId type StudyFieldType semester Int UniqueUserSubject user degree field StudyDegree key Int shorthand Text Maybe name Text Maybe Primary key StudyTerms key Int shorthand Text Maybe name Text Maybe Primary key Term json name TermIdentifier -- unTermKey :: TermId -> TermIdentifier start Day -- TermKey :: TermIdentifier -< TermId end Day holidays [Day] lectureStart Day lectureEnd Day active Bool Primary name -- newtype Key Term = TermKey { unTermKey :: TermIdentifier } deriving Show -- type TermId = Key Term School json name Text shorthand Text UniqueSchool name deriving Eq DegreeCourse json course CourseId degree StudyDegreeId terms StudyTermsId UniqueDegreeCourse course degree terms Course name Text description Html Maybe linkExternal Text Maybe shorthand Text termId TermId schoolId SchoolId capacity Int Maybe hasRegistration Bool -- canRegisterNow = hasRegistration && maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo registerFrom UTCTime Maybe registerTo UTCTime Maybe CourseTermShort termId shorthand CourseEdit user UserId time UTCTime course CourseId CourseFavourite user UserId time UTCTime course CourseId Lecturer userId UserId courseId CourseId UniqueLecturer userId courseId Corrector userId UserId courseId CourseId load Load -- SELECT submissionID FROM Tutorial, TutorialUser, Submission, Sheet -- WHERE ( tutorialTutor = correctorUserId -- && tutorialCourse = correctorCourseId -- && tutorialUserTutorial = tutorialId -- && submissionUser = tutorialUserUser -- && sheetId = submissionSheetId -- && sheetCourse = correctorCourseId -- ) UniqueCorrector userId courseId CourseParticipant courseId CourseId userId UserId registration UTCTime UniqueParticipant userId courseId Sheet courseId CourseId name Text description Html Maybe type SheetType grouping SheetGroup markingText Html Maybe visibleFrom UTCTime Maybe activeFrom UTCTime activeTo UTCTime hintFrom UTCTime Maybe solutionFrom UTCTime Maybe CourseSheet courseId name SheetEdit user UserId time UTCTime sheet SheetId SheetFile sheetId SheetId fileId FileId type SheetFileType UniqueSheetFile fileId sheetId type File title FilePath content ByteString Maybe -- Nothing iff this is a directory modified UTCTime deriving Show Eq Submission sheetId SheetId ratingPoints Points Maybe ratingComment Text Maybe ratingBy UserId Maybe ratingTime UTCTime Maybe deriving Show SubmissionEdit user UserId time UTCTime submission SubmissionId SubmissionFile submissionId SubmissionId fileId FileId isUpdate Bool isDeletion Bool UniqueSubmissionFile fileId submissionId isUpdate deriving Show SubmissionUser userId UserId submissionId SubmissionId UniqueSubmissionUser userId submissionId SubmissionGroup courseId CourseId name Text SubmissionGroupEdit user UserId time UTCTime submissionGroup SubmissionGroupId SubmissionGroupUser submissionGroupId SubmissionGroupId userId UserId UniqueSubmissionGroupUser submissionGroupId userId Tutorial json name Text tutor UserId course CourseId TutorialUser userId UserId tutorialId TutorialId UniqueTutorialUser userId tutorialId Booking termId TermId begin UTCTime end UTCTime weekly Bool exceptions [Day] -- only if weekly, begin in exception bookedFor RoomForId room RoomId BookingEdit user UserId time UTCTime boooking BookingId Room name Text capacity Int Maybe building Text Maybe -- BookingRoom -- subject RoomForId -- roomId RoomId -- bookingId BookingId -- UniqueRoomCourse subject roomId bookingId +RoomFor courseId CourseId tutorialId TutorialId examId ExamId -- data RoomFor = RoomForCourseIdSum CourseId | RoomForTutorialIdSum TutorialId ... -- EXAMS ARE TODO: Exam courseId CourseId name Text description Text begin UTCTime end UTCTime registrationBegin UTCTime registrationEnd UTCTime deregistrationEnd UTCTime ratingVisible Bool statisticsVisible Bool --ExamEdit -- user UserId -- time UTCTime -- exam ExamId --ExamUser -- userId UserId -- examId ExamId -- -- CONTINUE HERE: Include rating in this table or separately? -- UniqueExamUser userId examId -- By default this file is used in Model.hs (which is imported by Foundation.hs)