package domain import "time" // ExamPrepModule is a module under an exam-prep unit (stored in exam_prep.unit_modules). type ExamPrepModule struct { ID int64 `json:"id"` UnitID int64 `json:"unit_id"` Name string `json:"name"` Description *string `json:"description,omitempty"` Thumbnail *string `json:"thumbnail,omitempty"` Icon *string `json:"icon,omitempty"` SortOrder int `json:"sort_order"` PublishStatus ContentPublishStatus `json:"publish_status"` AccessTier ContentAccessTier `json:"access_tier"` EffectiveAccessTier ContentAccessTier `json:"effective_access_tier,omitempty"` LessonsCount *int64 `json:"lessons_count,omitempty"` PracticesCount *int64 `json:"practices_count,omitempty"` HasPractice bool `json:"has_practice"` Access *LMSEntityAccess `json:"access,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt *time.Time `json:"updated_at,omitempty"` } // VisibleToLearners is true when the module appears in student/learner exam-prep APIs. func (m ExamPrepModule) VisibleToLearners() bool { return m.PublishStatus == ContentPublishPublished } type CreateExamPrepModuleInput struct { Name string `json:"name" validate:"required"` Description *string `json:"description,omitempty"` Thumbnail *string `json:"thumbnail,omitempty"` Icon *string `json:"icon,omitempty"` // Omit or empty defaults to DRAFT; set PUBLISHED to make visible to learners immediately. PublishStatus *string `json:"publish_status,omitempty" validate:"omitempty,oneof=DRAFT draft PUBLISHED published"` AccessTier *string `json:"access_tier,omitempty" validate:"omitempty,oneof=FREE free PREMIUM premium"` } type UpdateExamPrepModuleInput struct { Name *string `json:"name,omitempty"` Description *string `json:"description,omitempty"` Thumbnail *string `json:"thumbnail,omitempty"` Icon *string `json:"icon,omitempty"` SortOrder *int `json:"sort_order,omitempty"` PublishStatus *string `json:"publish_status,omitempty" validate:"omitempty,oneof=DRAFT draft PUBLISHED published"` AccessTier *string `json:"access_tier,omitempty" validate:"omitempty,oneof=FREE free PREMIUM premium"` }