Introduce lms_personas table, repoint practice persona_id FKs off users, validate persona refs on LMS and exam-prep practice flows, personas.* RBAC permissions, and OpenAPI docs. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
2.2 KiB
Go
45 lines
2.2 KiB
Go
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"`
|
|
}
|