@startuml DM-EXAM
'https://plantuml.com/class-diagram

skinparam classAttributeIconSize 0
hide empty attributes
hide empty methods
skinparam classBackgroundColor beige
skinparam ArrowColor #222222

package "<<aggregate>> Exam" {
  entity Exam
}

package "<<aggregate>> Student" {
  entity Student
}

entity Student <<entity>> <<root>> {
}

package "<<aggregate>> Question" {
  entity Question
}

entity Question <<entity>> <<root>> {
}

package "<<aggregate>> ExamAnswer" {
  entity ExamAnswer

  class Grade

  entity AnswerToQuestion
  class Answer
}

entity ExamAnswer <<entity>> <<root>> {}

class Grade <<(V,#FF8B40) value object>> {}
class Answer <<(V,#FF8B40) value object>> {}

entity Exam <<entity>> <<root>> {}
entity AnswerToQuestion <<entity>> {}

Student --> "0..*"ExamAnswer : has
ExamAnswer --> "1" Exam : is for
ExamAnswer --> "0..1" Grade : has

AnswerToQuestion --> "1" Question : is for
AnswerToQuestion *-- "1" Answer

ExamAnswer *-- "1..*" AnswerToQuestion

@enduml
