package domain import "time" // ParentKind identifies which hierarchy entity owns a practice (exactly one). type ParentKind string const ( ParentKindCourse ParentKind = "COURSE" ParentKindModule ParentKind = "MODULE" ParentKindLesson ParentKind = "LESSON" ) // Practice is question-set content (story, persona, tips) scoped to a course, module, or lesson. type Practice struct { ID int64 `json:"id"` ParentKind ParentKind `json:"parent_kind"` ParentID int64 `json:"parent_id"` Title string `json:"title"` StoryDescription *string `json:"story_description,omitempty"` StoryImage *string `json:"story_image,omitempty"` PersonaID *int64 `json:"persona_id,omitempty"` QuestionSetID int64 `json:"question_set_id"` QuickTips *string `json:"quick_tips,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt *time.Time `json:"updated_at,omitempty"` } type CreatePracticeInput struct { ParentKind ParentKind `json:"parent_kind" validate:"required,oneof=COURSE MODULE LESSON"` ParentID int64 `json:"parent_id" validate:"required,gt=0"` Title string `json:"title" validate:"required"` 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"` } type UpdatePracticeInput 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"` }