@startuml

entity Course {
  - CourseId id
  - CourseName courseName
  - PositiveInteger maxRegisteredStudents
  - StudentId[] registeredStudents
  - Tutor[] tutors
  - Module[] modules
  + registerStudent(Student)
  + removeStudent(Student)
  + addTutor(Tutor)
  + removeTutor(Tutor)
}

entity CourseTutor {
    - Student[] assignedStudents
}

entity CourseStudent {
    - bool completed
    - Date? completionDate
}

entity Module {
  - ModuleId id
  - Lesson[] lessons
}

entity CourseEdition {
}

abstract Lesson {
  - LessonId id
  - LessonName name
  - LessonDescription description
  - Content content
}

entity SelfAssessableLesson {

}

entity TutoredLesson {
  - Tutor
  + setTutor(Tutor)
}

entity NoExamLesson {
}

entity Student {
  - StudentId
}
entity Tutor {
  - TutorId
}

SelfAssessableLesson <|-- Lesson
TutoredLesson <|-- Lesson
NoExamLesson <|-- Lesson

Course "n" --o "m" Module: contains
Module "1" --* "n" Lesson: contains

Student "1" --o "n" CourseStudent
CourseStudent "n" --o "1" Course

Tutor "1" --o "n" CourseTutor
CourseTutor "n" --o "1" Course


@enduml
