47 lines
2.3 KiB
Go
47 lines
2.3 KiB
Go
package domain
|
||
|
||
import "time"
|
||
|
||
// Module belongs to a Course. program_id is the course’s program (stored for querying; not required from the client on create).
|
||
type Module struct {
|
||
ID int64 `json:"id"`
|
||
ProgramID int64 `json:"program_id"`
|
||
CourseID int64 `json:"course_id"`
|
||
Name string `json:"name"`
|
||
Description *string `json:"description,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"`
|
||
HasPractice bool `json:"has_practice"`
|
||
CreatedAt time.Time `json:"created_at"`
|
||
UpdatedAt *time.Time `json:"updated_at,omitempty"`
|
||
Access *LMSEntityAccess `json:"access,omitempty"`
|
||
}
|
||
|
||
// VisibleToLearners is true when the module appears in subscriber/catalog LMS APIs.
|
||
func (m Module) VisibleToLearners() bool {
|
||
return m.PublishStatus == ContentPublishPublished
|
||
}
|
||
|
||
type CreateModuleInput struct {
|
||
Name string `json:"name" validate:"required"`
|
||
Description *string `json:"description,omitempty"`
|
||
Icon *string `json:"icon,omitempty"`
|
||
// SortOrder within the course when set; omit to append after current max within course_id (uniqueness is per-course).
|
||
SortOrder *int `json:"sort_order,omitempty" validate:"omitempty,min=0"`
|
||
// 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 UpdateModuleInput struct {
|
||
Name *string `json:"name,omitempty"`
|
||
Description *string `json:"description,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"`
|
||
}
|