package domain import ( "errors" "time" ) var ( ErrPrerequisiteNotMet = errors.New("prerequisites not completed") ErrProgressNotFound = errors.New("progress record not found") ErrPrerequisiteExists = errors.New("prerequisite already exists") ErrSelfPrerequisite = errors.New("sub-course cannot be its own prerequisite") ErrSubCourseAlreadyStarted = errors.New("sub-course already started") ) type SubCoursePrerequisite struct { ID int64 SubCourseID int64 PrerequisiteSubCourseID int64 PrerequisiteTitle string PrerequisiteLevel string PrerequisiteDisplayOrder int32 CreatedAt time.Time } type SubCourseDependent struct { ID int64 SubCourseID int64 PrerequisiteSubCourseID int64 DependentTitle string DependentLevel string CreatedAt time.Time } type ProgressStatus string const ( ProgressStatusNotStarted ProgressStatus = "NOT_STARTED" ProgressStatusInProgress ProgressStatus = "IN_PROGRESS" ProgressStatusCompleted ProgressStatus = "COMPLETED" ) type UserSubCourseProgress struct { ID int64 UserID int64 SubCourseID int64 Status ProgressStatus ProgressPercentage int16 StartedAt *time.Time CompletedAt *time.Time CreatedAt time.Time UpdatedAt *time.Time } type SubCourseWithProgress struct { SubCourseID int64 Title string Description *string Thumbnail *string DisplayOrder int32 Level string IsActive bool ProgressStatus ProgressStatus ProgressPercentage int16 StartedAt *time.Time CompletedAt *time.Time UnmetPrerequisitesCount int64 IsLocked bool } type UserCourseProgressItem struct { ID int64 UserID int64 SubCourseID int64 Status ProgressStatus ProgressPercentage int16 StartedAt *time.Time CompletedAt *time.Time CreatedAt time.Time UpdatedAt *time.Time SubCourseTitle string SubCourseLevel string SubCourseDisplayOrder int32 }