-- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Sarah Vaupel ,Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later DegreeCourse json -- for which degree programmes this course is appropriate for course CourseId OnDeleteCascade OnUpdateCascade degree StudyDegreeId terms StudyTermsId UniqueDegreeCourse course degree terms deriving Generic Course -- Information about a single course; contained info is always visible to all users name (CI Text) description StoredMarkup Maybe -- user-defined large Html, ought to contain module description linkExternal URI Maybe -- arbitrary user-defined url for external course page shorthand (CI Text) -- practical shorthand of course name, used for identification term TermId -- semester this course is taught school SchoolId capacity Int Maybe -- number of allowed enrolements, if restricted -- canRegisterNow = maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo visibleFrom UTCTime Maybe default=now() -- course may be visible from a given day onwards or always hidden visibleTo UTCTime Maybe -- course may be hidden from a given date onwards registerFrom UTCTime Maybe -- enrolement allowed from a given day onwwards or prohibited registerTo UTCTime Maybe -- enrolement may be prohibited from a given date onwards deregisterUntil UTCTime Maybe -- unenrolement may be prohibited from a given date onwards registerSecret Text Maybe -- enrolement maybe protected by a simple common passphrase materialFree Bool -- False: only enrolled users may see course materials not stored in this table TermSchoolCourseShort term school shorthand -- shorthand must be unique within school and semester TermSchoolCourseName term school name -- name must be unique within school and semester deriving Generic CourseEvent type (CI Text) course CourseId OnDeleteCascade OnUpdateCascade room RoomReference Maybe roomHidden Bool default=false time Occurrences note StoredMarkup Maybe lastChanged UTCTime default=now() deriving Generic CourseAppInstructionFile course CourseId OnDeleteCascade OnUpdateCascade title FilePath content FileContentReference Maybe modified UTCTime UniqueCourseAppInstructionFile course title deriving Generic CourseEdit -- who edited when a row in table "Course", kept indefinitely (might be replaced by generic Audit Table; like all ...-Edit tables) user UserId time UTCTime course CourseId OnDeleteCascade OnUpdateCascade deriving Generic Lecturer -- course ownership user UserId course CourseId OnDeleteCascade OnUpdateCascade type LecturerType default='"lecturer"'::jsonb UniqueLecturer user course -- note: multiple lecturers per course are allowed, but no duplicated rows in this table deriving Generic CourseParticipant -- course enrolement course CourseId user UserId registration UTCTime -- time of last enrolement for this course field StudyFeaturesId Maybe MigrationOnly state CourseParticipantState UniqueParticipant user course deriving Eq Ord Show Generic -- Replace the last two by the following, once an audit log is available -- CourseUserNote -- lecturers of a specific course may share a text note on each enrolled student -- course CourseId -- user UserId -- note Html -- arbitrary user-defined text; visible only to lecturer of this course -- time UTCTime -- PROBLEM: deleted note has no modification date -- editor UserId -- who edited this note last -- UniqueCourseUserNote user course CourseUserNote -- lecturers of a specific course may share a text note on each enrolled student course CourseId user UserId note StoredMarkup -- arbitrary user-defined text; visible only to lecturer of this course UniqueCourseUserNote user course deriving Generic CourseUserNoteEdit -- who edited a participants course note when user UserId time UTCTime note CourseUserNoteId -- PROBLEM: deleted notes have no modification date any more deriving Generic CourseUserExamOfficeOptOut course CourseId user UserId school SchoolId UniqueCourseUserExamOfficeOptOut course user school deriving Generic CourseQualification course CourseId qualification QualificationId sortOrder Int default=0 --TODO: not yet used in Handler.Course.Users.makeCourseUserTable UniqueCourseQualification course qualification deriving Generic