Derive question_text from QUESTION_TEXT, INSTRUCTION, or TEXT_PASSAGE stimulus for DYNAMIC questions so the top-level field is no longer required on create. OPEN_LEARNER access responses now set is_accessible and is_completed to true on all LMS and exam-prep content, with full progress when totals exist. Co-authored-by: Cursor <cursoragent@cursor.com>
37 lines
1019 B
Go
37 lines
1019 B
Go
package domain
|
|
|
|
type Role string
|
|
|
|
const (
|
|
RoleSuperAdmin Role = "SUPER_ADMIN"
|
|
RoleAdmin Role = "ADMIN"
|
|
RoleStudent Role = "STUDENT"
|
|
// RoleOpenLearner can consume LMS content like a learner without sequential locks; access APIs show all content accessible and completed.
|
|
RoleOpenLearner Role = "OPEN_LEARNER"
|
|
RoleInstructor Role = "INSTRUCTOR"
|
|
RoleSupport Role = "SUPPORT"
|
|
)
|
|
|
|
func (r Role) IsValid() bool {
|
|
switch r {
|
|
case RoleSuperAdmin, RoleAdmin, RoleStudent, RoleOpenLearner, RoleInstructor, RoleSupport:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// UsesLMSSequentialGating is true when LMS APIs apply sequential prerequisite locks (403 when blocked).
|
|
func (r Role) UsesLMSSequentialGating() bool {
|
|
return r == RoleStudent
|
|
}
|
|
|
|
// IsCustomerLearnerRole is true for platform roles that sign in as customers and consume learner-facing LMS APIs.
|
|
func (r Role) IsCustomerLearnerRole() bool {
|
|
return r == RoleStudent || r == RoleOpenLearner
|
|
}
|
|
|
|
func (r Role) Value() string {
|
|
return string(r)
|
|
}
|