User plugin Text ident Text matrikelnummer Text Maybe email Text displayName Text maxFavourites Int default=12 theme Theme default='default' UniqueAuthentication plugin ident UniqueEmail email 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 term TermId school SchoolId capacity Int Maybe -- canRegisterNow = maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo registerFrom UTCTime Maybe registerTo UTCTime Maybe deregisterUntil UTCTime Maybe registerSecret Text Maybe -- Falls ein Passwort erforderlich ist materialFree Bool default=true CourseTermShort term shorthand CourseEdit user UserId time UTCTime course CourseId CourseFavourite user UserId time UTCTime course CourseId UniqueCourseFavourite user course Lecturer user UserId course CourseId UniqueLecturer user course CourseParticipant course CourseId user UserId registration UTCTime UniqueParticipant user course Sheet course 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 course name SheetEdit user UserId time UTCTime sheet SheetId SheetCorrector user UserId sheet SheetId load Load UniqueSheetCorrector user sheet deriving Show Eq Ord SheetFile sheet SheetId file FileId type SheetFileType UniqueSheetFile file sheet type File title FilePath content ByteString Maybe -- Nothing iff this is a directory modified UTCTime deriving Show Eq Submission sheet SheetId ratingPoints Points Maybe ratingComment Text Maybe ratingBy UserId Maybe ratingTime UTCTime Maybe deriving Show SubmissionEdit user UserId time UTCTime submission SubmissionId SubmissionFile submission SubmissionId file FileId isUpdate Bool -- is this the file updated by a corrector (original will always be retained) isDeletion Bool -- only set if isUpdate is also set, but file was deleted by corrector UniqueSubmissionFile file submission isUpdate deriving Show SubmissionUser user UserId submission SubmissionId UniqueSubmissionUser user submission SubmissionGroup course CourseId name Text Maybe SubmissionGroupEdit user UserId time UTCTime submissionGroup SubmissionGroupId SubmissionGroupUser submissionGroup SubmissionGroupId user UserId UniqueSubmissionGroupUser submissionGroup user Tutorial json name Text tutor UserId course CourseId TutorialUser user UserId tutorial TutorialId UniqueTutorialUser user tutorial Booking term 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 -- room RoomId -- booking BookingId -- UniqueRoomCourse subject room booking +RoomFor course CourseId tutorial TutorialId exam ExamId -- data RoomFor = RoomForCourseSum CourseId | RoomForTutorialSum TutorialId ... -- EXAMS ARE TODO: Exam course 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 -- user UserId -- examId ExamId -- -- CONTINUE HERE: Include rating in this table or separately? -- UniqueExamUser user examId -- By default this file is used in Model.hs (which is imported by Foundation.hs)