Extend DRAFT/PUBLISHED to programs, courses, modules, and exam-prep hierarchy entities with learner visibility gating and progress exclusion. Resolve question_type_definition_id in question responses for legacy system types and unlinked dynamic questions. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
2.2 KiB
Go
45 lines
2.2 KiB
Go
package domain
|
|
|
|
import "time"
|
|
|
|
// ExamPrepUnit is a chapter-like grouping under an exam-prep catalog course (schema exam_prep.units).
|
|
type ExamPrepUnit struct {
|
|
ID int64 `json:"id"`
|
|
CatalogCourseID int64 `json:"catalog_course_id"`
|
|
Name string `json:"name"`
|
|
Description *string `json:"description,omitempty"`
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
SortOrder int `json:"sort_order"`
|
|
PublishStatus ContentPublishStatus `json:"publish_status"`
|
|
ModulesCount *int64 `json:"modules_count,omitempty"`
|
|
LessonsCount *int64 `json:"lessons_count,omitempty"`
|
|
PracticesCount *int64 `json:"practices_count,omitempty"`
|
|
HasPractice bool `json:"has_practice"`
|
|
Access *LMSEntityAccess `json:"access,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt *time.Time `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
// VisibleToLearners is true when the unit appears in student/learner exam-prep APIs.
|
|
func (u ExamPrepUnit) VisibleToLearners() bool {
|
|
return u.PublishStatus == ContentPublishPublished
|
|
}
|
|
|
|
type CreateExamPrepUnitInput struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Description *string `json:"description,omitempty"`
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
// SortOrder within the catalog course when set; omit to append after current max sort_order within catalog_course_id.
|
|
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"`
|
|
}
|
|
|
|
type UpdateExamPrepUnitInput struct {
|
|
Name *string `json:"name,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Thumbnail *string `json:"thumbnail,omitempty"`
|
|
SortOrder *int `json:"sort_order,omitempty"`
|
|
PublishStatus *string `json:"publish_status,omitempty" validate:"omitempty,oneof=DRAFT draft PUBLISHED published"`
|
|
}
|