48 lines
1.9 KiB
Go
48 lines
1.9 KiB
Go
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"`
|
|
}
|