Architecture Overview
1. Server: Course Module
Module:server/src/course/course.module.ts
1.1 Hierarchy
1.2 Controllers
File:server/src/course/course.controller.ts — Route prefix /course
Section endpoints (nested under
/course):
Subsection endpoints:
Item endpoints:
Property endpoints (Requirements, Inclusions, Audiences):
Batch controller (
batch-update.controller.ts):
Course Manager controller (
course-manager.controller.ts):
1.3 Services
1.4 Entities
Course (entities/course.entity.ts) — Table: courses
CourseSection (
entities/sections.entity.ts) — Table: course_sections
CourseSubSection (
entities/subsections.entity.ts) — Table: course_subsections
CourseItem (
entities/course_item.entity.ts) — Table: course_items
Level (
entities/level.entity.ts) — Table: levels — id, text
CourseManager (entities/manager.entity.ts) — Junction: course ↔ instructor
1.5 Enums
1.6 CASL Permissions
File:course.permissions.ts
Hooks:
CourseHook loads course entity for permission checks. CourseSectionHook loads section’s parent course.
1.7 WebSocket Gateway
File:course-progress.gateway.ts — Namespace course-progress
Events: heartbeat, time_update, mark_completed, get_last_watched. 5s debounce on writes. Syncs video position to UserVideoProgress.
1.8 Background Jobs
File:jobs/certificate-generation.job.ts — BullMQ job for completion certificates.
2. Server: Enrollment Module
Module:server/src/enrollment/enrollment.module.ts — Route /enrollment
2.1 Endpoints
Enrollment Entity (
entities/enrollment.entity.ts) — Table: enrollments
EnrollmentStatus enum: PENDING, APPROVED, COMPLETED, REJECTED, REFUNDED
2.2 Enrollment Flow
3. Server: Cross-Cutting
3.1 OpenSearch Integration
Files:server/src/opensearch/
Courses are indexed with
gigActive flag. Search queries filter gigActive: true.
3.2 Marketplace (Public Course Search)
Route:/marketplace/course (separate controller)
Used by public/ for course discovery. Wraps OpenSearch queries.
3.3 Analytics
File:server/src/analytics/entities/course-analytics-daily.entity.ts
Daily aggregations: enrollments, revenue, views, completions per course.
3.4 Video Infrastructure
- Bunny Stream for video hosting
- TUS resumable upload protocol via
initVideoUpload→ returns upload URL + signature refreshVideoUploadfor expiring signaturesgetVideoPlaybackreturns playback URL, thumbnail, available resolutions
4. Student Frontend
4.1 Service Layer
File:student/src/services/course.service.ts
Static HTTP client class. Defines local Course, Section, Subsection, Item, Level, Category, Instructor, etc. interfaces.
4.2 Player Service
File:student/src/services/course-player.service.ts
Returns
StudentCoursePlayerDto with section locking, progress, pre-signed video URLs.
4.3 Progress Service
File:student/src/services/course-progress.service.ts
4.4 React Query Hooks
useCourseProgress returns:
progress,isLoading,errorupdateProgress,updateSection,updateSubsection,updateItemsetCurrentPosition,getItemProgress,markItemCompleted,updateVideoTimegetSectionProgress,getSubsectionProgress
onMutate snapshots + onError rollback + onSettled invalidation.
4.5 Zustand Store
File:student/src/stores/my-course.ts
Persisted store (my-course-store key) for current player position: sectionId, subsectionId, itemId, videoCurrentTime.
4.6 Progress Types
File:student/src/types/course-progress.d.ts
4.7 Pages
4.8 Player Components
5. Instructor Frontend
5.1 Service Layer
File:instructor/src/services/course.service.ts
Full CRUD for course management. Defines local CourseResponseDto, CreateCourseDto, UpdateCourseDto, CourseSummaryDto, CourseManagerDto.
Additional services:
instructor/src/services/course-item.service.ts— Item CRUDinstructor/src/services/course-section.service.ts— Section CRUDinstructor/src/services/course-subsection.service.ts— Subsection CRUD
5.2 Course Editor
Multi-step form with Zustand store slices:
Editor pages:
Editor components:
5.3 Dashboard Pages
5.4 Zod Validation
File:instructor/src/utils/schema/course.schema.ts — normalizedCurriculumSchema
6. Admin Frontend
6.1 Service Layer
File:admin/src/services/course.service.ts
6.2 Admin Course Types
File:admin/src/types/course.types.ts
Defines AdminCourse (280+ lines), CourseListParams, CurriculumData, CourseFilters, CourseStatistics, CourseDetailAnalytics, CourseReview, PublishStatus enum, DurationMeasure enum, VisibilityUpdate.
6.3 Zod Schemas
File:admin/src/schemas/course.schema.ts
courseFiltersSchema, visibilityUpdateSchema, courseRejectionSchema, courseApprovalSchema.
6.4 Data Provider Handler
File:admin/src/providers/data-provider/handlers/courses.handler.ts
Integrates with Refine/React Admin for list, show, delete operations.
6.5 Pages & Components
7. Public/Marketplace Frontend
7.1 Service Layer
File:public/src/services/course.service.ts
7.2 Hooks
7.3 Store
File:public/src/stores/course.ts
Zustand store: currentTab, selectedSections for à-la-carte purchasing with section selection/deselection and price calculation.
8. SDK (Auto-generated)
Files:sdk/src/
9. Data Flow Diagrams
Course Creation (Instructor)
Course Player (Student)
Course Approval (Admin)
Enrollment (Student Purchase)
Course Search (Marketplace)
10. File Index by Package
Server: Course Module (~58 files)
Server: Enrollment Module (~16 files)
enrollment.module.ts, enrollment.controller.ts, enrollment.service.ts, entities/enrollment.entity.ts, entities/section-enrollments.entity.ts, enums/enrollment-status.entity.ts, dto/ (7 files), listeners/enrollment.listener.ts, enrollment.permissions.ts, enrollment.hook.ts
Server: Cross-Cutting
elastic/course-elastic.service.ts, elastic/types/opensearch-course.type.ts, elastic/properties/course.property.ts, elastic/listeners/course.listener.ts, analytics/entities/course-analytics-daily.entity.ts, faker/flows/course.flow.ts, validation/schemas/course.schema.ts, templates/emails/course.tsx
Student Frontend (~18 files)
Instructor Frontend (~30 files)
Admin Frontend (~18 files)
Public Marketplace (~7 files)
SDK (~4 files)
axios/course/course.ts, axios/course-managers/course-managers.ts, hooks/course/course.ts, hooks/course-managers/course-managers.ts
Landing Page (~3 files)
components/cards/courses_card/CoursesCard.jsx, pages/home/courseSearch/CourseSearch.jsx