MemberPulse
EntitiesCore

Course (LMS)

LMS course entity with content structure

LMS course entity with content structure

Represents courses in the Learning Management System.

Fields

Field Registry (from workspace/sources/entity-registry.csv)

FieldInput TypeRequiredNotes
Course IDNumberRequiredAutomatically generated
Course NameTextRequiredmodel: name
Tile Short DescriptionTextRequiredCourse Description (First 135 Characters Will Show In Course Tile) ?
Course DescriptionWYSIWYG (Textarea)Requiredmodel: description
Course CategoryMulti-selectRequiredAutocomplete design (many to many selector); model: courseCategories, rel: ManyToMany CourseCategory
Course featured imageFileRequiredSingle Image; model: featuredImage, rel: string imageFile
SeriesMulti-select-model: courseSeries, rel: OneToMany CourseSeries
BranchesMulti-select-model: courseBranches, rel: OneToMany CourseBranches
Course TypeSelectorRequiredPulls through a list of different types (eg. video, pdf); model: courseType, rel: ManyToOne CourseType
Course AuthorTextRequiredmodel: author, rel: string
Publish DateDateRequiredCalendar Selector; model: publishDateTime, rel: datetime
Publish Time--model: publishDateTime, rel: datetime
Estimated Completion TimeNumberRequiredIn minutes; model: estimatedCompletionTime, rel: integer
Start DateDateRequiredCalendar Selector; model: startDate, rel: datetime
Close DateDateNot RequiredIf this is selected, must have logic to be after start date and it means the tile should; model: closeDate, rel: datetime
CPD PointsNumberRequiredmodel: cpdPoints, rel: float
CPD CategoryMulti-selectRequiredAutocomplete design (many to many selector); model: cpdCategories, rel: OneToMany CpdCategory
Members PriceTextRequired-
Members LimitNumberNot Requiredmodel: membersLimit, rel: integer
Non-Members PriceTextRequiredmodel: nonMembersPrice, rel: float
Non-Members LimitNumberNot Requiredmodel: nonMembersLimit, rel: integer
General Attendance LimitNumberNot RequiredSeparate to the above, however total of this should equal to the two fields if filled in; model: generalAttendanceLimit, rel: integer
Status--model: status, rel: ManyToOne CourseStatus
Sponsor NameTextNot RequiredRepeater Field / You will need a sponsorship entity
Sponsor URLURLNot Required-
Sponsor LogoFileNot Required-
Subject NameTextRequiredmodel: name
Subject DescriptionTextRequiredmodel: description
Subject DurationNumberRequiredIn minutes - if left empty the timer is infinite; model: duration
Subject Time RemainingNumberRequiredFor members only - if the subject is paused; model: timeRemaining
Subject FileFileRequiredVideo / Document; model: subjectFile
File ThumbnailFileNot RequiredImage for the thumbnail - requires default thumbnails if not selected; model: fileThumbnail
Zoom LinkSelectorRequiredAPI - pulls through a list of all available zoom videos; model: zoomLink
Questions RequiredTrue / FalseRequiredShow/Hides the Question UI - this means a subject can be completed without answering questions; model: isQuestionsRequired
How many questionsNumberRequiredIf questions are required - generates a list of empty questions (fields below); model: numberOfQuestions
Generate with AIYes / NoRequiredButton for now - this will trigger the AI API to generate the list of questions; model: generateWithAI
Question TypeSelectorRequiredmodel: questionType, rel: enum single_answer, multiple_answer
QuestionTextRequiredmodel: text
Answer-RequiredBased on type, it can be (radio, checkbox) - this also needs a checkbox to choose the right answer
Generate with AIButtonNot RequiredPress to trigger AI to generate for this question

Embedded: Subject List

FieldTypeDescription
subjectIdUUIDSubject ID
namestringSubject name
descriptiontextSubject description
orderintegerDisplay order
contentarrayContent items

Content Item Structure

FieldTypeDescription
contentTypeenumvideo, pdf, text, quiz
contentUrlstringContent URL/body
questionstringQuiz question
answerstringCorrect answer
answerOptionsarrayMultiple choice options

Relationships

RelationTypeTarget Entity
enrollmentsOneToManyCourseEnrollment

Features

Course (LMS)

Acceptance Criteria

Frontend
  • Admin/client UI can view and manage Course (LMS) records where applicable.
Backend / API
  • CRUD operations exist for Course (LMS) (create, read, update, delete/archive).
Permissions
  • Access is restricted to appropriate roles (tenant-scoped).
Business Rules
  • Fields and relationships documented on this page are enforced for Course (LMS).
Error Handling
  • Invalid payloads return field-level validation errors.

On this page