package domain import "time" // ExamPrepPractice is question-set content tied to an exam-prep lesson; uses shared question_sets / questions. type ExamPrepPractice struct { ID int64 `json:"id"` LessonID int64 `json:"lesson_id"` // exam_prep.unit_module_lessons.id Title string `json:"title"` StoryDescription *string `json:"story_description,omitempty"` StoryImage *string `json:"story_image,omitempty"` PersonaID *int64 `json:"persona_id,omitempty"` // lms_personas.id when set QuestionSetID int64 `json:"question_set_id"` PublishStatus PracticePublishStatus `json:"publish_status"` QuickTips *string `json:"quick_tips,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt *time.Time `json:"updated_at,omitempty"` } // VisibleToLearners mirrors LMS practice visibility rules for subscribers. func (p ExamPrepPractice) VisibleToLearners() bool { return p.PublishStatus == PracticePublishPublished } // CreateExamPrepPracticeInput is the body for POST .../exam-prep/lessons/{lessonId}/practices (lesson from path). type CreateExamPrepPracticeInput struct { Title *string `json:"title,omitempty"` StoryDescription *string `json:"story_description,omitempty"` StoryImage *string `json:"story_image,omitempty"` PersonaID *int64 `json:"persona_id,omitempty"` QuestionSetID int64 `json:"question_set_id" validate:"required,gt=0"` QuickTips *string `json:"quick_tips,omitempty"` PublishStatus string `json:"publish_status,omitempty" validate:"omitempty,oneof=DRAFT draft PUBLISHED published"` } type UpdateExamPrepPracticeInput struct { Title *string `json:"title,omitempty"` StoryDescription *string `json:"story_description,omitempty"` StoryImage *string `json:"story_image,omitempty"` PersonaID *int64 `json:"persona_id,omitempty"` QuestionSetID *int64 `json:"question_set_id,omitempty"` QuickTips *string `json:"quick_tips,omitempty"` PublishStatus *string `json:"publish_status,omitempty" validate:"omitempty,oneof=DRAFT draft PUBLISHED published"` }