-
This commit is contained in:
commit
b42ce3ef82
365
course_hierarchy.md
Normal file
365
course_hierarchy.md
Normal file
|
|
@ -0,0 +1,365 @@
|
||||||
|
Below is the clean Markdown (.md) version of the architecture, ready to copy directly into a file like
|
||||||
|
learning-platform-architecture.md.
|
||||||
|
|
||||||
|
⸻
|
||||||
|
|
||||||
|
|
||||||
|
# Learning Platform System Architecture
|
||||||
|
**Admin & Learner Content Management, Video (Vimeo), Assessment & Progress Tracking**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Architecture Overview
|
||||||
|
|
||||||
|
### Architecture Style
|
||||||
|
**Modular Monolith (MVP-ready, Microservices-friendly)**
|
||||||
|
|
||||||
|
This approach enables:
|
||||||
|
- Fast MVP delivery
|
||||||
|
- Clear separation of responsibilities
|
||||||
|
- Easy future extraction into microservices (Assessment, Video, Analytics)
|
||||||
|
|
||||||
|
Admin Web / Mobile App
|
||||||
|
↓
|
||||||
|
API Gateway / BFF
|
||||||
|
↓
|
||||||
|
Core Application Services
|
||||||
|
↓
|
||||||
|
Domain Modules
|
||||||
|
↓
|
||||||
|
Databases & External Integrations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Client Layer
|
||||||
|
|
||||||
|
### 2.1 Admin Panel (Web)
|
||||||
|
|
||||||
|
**Responsibilities**
|
||||||
|
- Program, Course, Module creation
|
||||||
|
- Video upload & Vimeo integration
|
||||||
|
- Assessment & practice creation
|
||||||
|
- Publishing workflows
|
||||||
|
- Analytics & reporting
|
||||||
|
|
||||||
|
**Consumes**
|
||||||
|
- Secured Admin APIs
|
||||||
|
- Role-based access control
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.2 Learner App (Mobile / Web)
|
||||||
|
|
||||||
|
**Responsibilities**
|
||||||
|
- Fetch courses and modules
|
||||||
|
- Watch videos (Vimeo player)
|
||||||
|
- Take assessments & practices
|
||||||
|
- Track and resume learning progress
|
||||||
|
|
||||||
|
**Consumes**
|
||||||
|
- Read-optimized Learner APIs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. API Gateway / Backend-for-Frontend (BFF)
|
||||||
|
|
||||||
|
**Purpose**
|
||||||
|
- Separate Admin and Learner concerns
|
||||||
|
- Aggregate responses
|
||||||
|
- Enforce security and versioning
|
||||||
|
|
||||||
|
**Endpoints**
|
||||||
|
|
||||||
|
/api/admin/*
|
||||||
|
/api/learner/*
|
||||||
|
|
||||||
|
**Capabilities**
|
||||||
|
- Authentication & authorization
|
||||||
|
- Rate limiting
|
||||||
|
- API versioning
|
||||||
|
- Response aggregation (content + progress)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Core Domain Modules
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.1 Content Structure Module (Foundation)
|
||||||
|
|
||||||
|
Defines the **learning hierarchy** and core relationships.
|
||||||
|
|
||||||
|
### Learning Hierarchy
|
||||||
|
|
||||||
|
Program
|
||||||
|
└── Course
|
||||||
|
└── Module
|
||||||
|
├── Video
|
||||||
|
└── Assessment
|
||||||
|
|
||||||
|
### Core Entities
|
||||||
|
|
||||||
|
#### Program
|
||||||
|
|
||||||
|
id
|
||||||
|
name
|
||||||
|
description
|
||||||
|
level (Beginner | Intermediate | Advanced)
|
||||||
|
metadata (JSON)
|
||||||
|
status (draft | published)
|
||||||
|
|
||||||
|
#### Course
|
||||||
|
|
||||||
|
id
|
||||||
|
program_id
|
||||||
|
name
|
||||||
|
CEFR_level
|
||||||
|
order
|
||||||
|
metadata (JSON)
|
||||||
|
status
|
||||||
|
|
||||||
|
#### Module
|
||||||
|
|
||||||
|
id
|
||||||
|
course_id
|
||||||
|
title
|
||||||
|
order
|
||||||
|
metadata (JSON)
|
||||||
|
status
|
||||||
|
|
||||||
|
> **Why metadata (JSON)?**
|
||||||
|
> - Allows future parameters without database migrations
|
||||||
|
> - Examples: difficulty, tags, AI flags, localization, prerequisites
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.2 Video Module (Vimeo Integrated)
|
||||||
|
|
||||||
|
### Responsibilities
|
||||||
|
- Store video metadata
|
||||||
|
- Integrate with Vimeo
|
||||||
|
- Track watch progress
|
||||||
|
- Enforce publishing dependencies
|
||||||
|
|
||||||
|
### Video Entity
|
||||||
|
|
||||||
|
id
|
||||||
|
module_id
|
||||||
|
title
|
||||||
|
description
|
||||||
|
order
|
||||||
|
vimeo_video_id
|
||||||
|
duration
|
||||||
|
thumbnail_url
|
||||||
|
status (draft | published)
|
||||||
|
metadata (JSON)
|
||||||
|
|
||||||
|
### Vimeo Integration Flow
|
||||||
|
1. Admin uploads video
|
||||||
|
2. Backend uploads to Vimeo
|
||||||
|
3. Store Vimeo metadata:
|
||||||
|
- video ID
|
||||||
|
- duration
|
||||||
|
- thumbnails
|
||||||
|
4. Listen to Vimeo webhooks:
|
||||||
|
- video.processed
|
||||||
|
- video.deleted
|
||||||
|
|
||||||
|
**Publishing Rule**
|
||||||
|
- An assessment linked to a video **cannot be published** unless the video is published
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.3 Assessment & Practice Module (Isolated)
|
||||||
|
|
||||||
|
This module is **fully decoupled** from videos and modules.
|
||||||
|
|
||||||
|
### Why Isolation?
|
||||||
|
- Supports course-level, module-level, and video-level practices
|
||||||
|
- Enables future AI grading and certification
|
||||||
|
- Allows independent scaling
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Assessment Entities
|
||||||
|
|
||||||
|
#### Assessment
|
||||||
|
|
||||||
|
id
|
||||||
|
scope_type (PROGRAM | COURSE | MODULE | VIDEO)
|
||||||
|
scope_id
|
||||||
|
title
|
||||||
|
assessment_type (speaking | mcq | listening | mock_test)
|
||||||
|
status (draft | published)
|
||||||
|
metadata (JSON)
|
||||||
|
|
||||||
|
#### Question
|
||||||
|
|
||||||
|
id
|
||||||
|
assessment_id
|
||||||
|
type (text | voice | mcq)
|
||||||
|
prompt
|
||||||
|
sample_answer
|
||||||
|
tips
|
||||||
|
order
|
||||||
|
metadata (JSON)
|
||||||
|
|
||||||
|
#### Persona
|
||||||
|
|
||||||
|
id
|
||||||
|
name
|
||||||
|
voice
|
||||||
|
avatar
|
||||||
|
metadata (JSON)
|
||||||
|
|
||||||
|
### Flexible Linking
|
||||||
|
Assessments can be attached to:
|
||||||
|
- Entire courses
|
||||||
|
- Specific modules
|
||||||
|
- Individual videos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.4 Progress Tracking Module
|
||||||
|
|
||||||
|
Tracks **all learner activity** without modifying content logic.
|
||||||
|
|
||||||
|
### Responsibilities
|
||||||
|
- Video progress tracking
|
||||||
|
- Assessment attempts
|
||||||
|
- Completion states
|
||||||
|
- Resume learning
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Progress Entities
|
||||||
|
|
||||||
|
#### User Content Progress
|
||||||
|
|
||||||
|
user_id
|
||||||
|
content_type (PROGRAM | COURSE | MODULE)
|
||||||
|
content_id
|
||||||
|
progress_percentage
|
||||||
|
status (not_started | in_progress | completed)
|
||||||
|
|
||||||
|
#### User Video Progress
|
||||||
|
|
||||||
|
user_id
|
||||||
|
video_id
|
||||||
|
watched_seconds
|
||||||
|
completion_percentage
|
||||||
|
completed_at
|
||||||
|
|
||||||
|
#### User Assessment Progress
|
||||||
|
|
||||||
|
user_id
|
||||||
|
assessment_id
|
||||||
|
attempt_no
|
||||||
|
score
|
||||||
|
feedback
|
||||||
|
completed_at
|
||||||
|
|
||||||
|
**Supports**
|
||||||
|
- Resume playback
|
||||||
|
- Lock/unlock content
|
||||||
|
- Accurate dashboards
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Publishing & Dependency Rules Engine
|
||||||
|
|
||||||
|
A configurable rule-based system.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
- Course cannot be published without published modules
|
||||||
|
- Module cannot be published without at least one published video
|
||||||
|
- Assessment cannot be published if linked video is draft
|
||||||
|
|
||||||
|
### Rule Model
|
||||||
|
|
||||||
|
entity_type
|
||||||
|
condition
|
||||||
|
error_message
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Analytics & Reporting Module
|
||||||
|
|
||||||
|
Analytics consume **events**, not business logic.
|
||||||
|
|
||||||
|
### Events
|
||||||
|
- video.started
|
||||||
|
- video.completed
|
||||||
|
- assessment.started
|
||||||
|
- assessment.completed
|
||||||
|
- course.completed
|
||||||
|
|
||||||
|
Stored in:
|
||||||
|
- Analytics database
|
||||||
|
- Event stream (Kafka-ready)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Data Layer
|
||||||
|
|
||||||
|
### Recommended Stack
|
||||||
|
- **PostgreSQL** – relational core data
|
||||||
|
- **Redis** – progress caching & resume states
|
||||||
|
- **Object Storage** – thumbnails, audio prompts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Security & Roles
|
||||||
|
|
||||||
|
### Roles
|
||||||
|
|
||||||
|
Admin
|
||||||
|
Content Manager
|
||||||
|
Instructor
|
||||||
|
Learner
|
||||||
|
|
||||||
|
### Enforcement
|
||||||
|
- API-level authorization
|
||||||
|
- Draft vs published access rules
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Extensibility & Future Readiness
|
||||||
|
|
||||||
|
This architecture supports:
|
||||||
|
- AI scoring & feedback
|
||||||
|
- New assessment types
|
||||||
|
- Certificates
|
||||||
|
- Offline sync
|
||||||
|
- Multiple video providers (Vimeo → AWS IVS)
|
||||||
|
|
||||||
|
Without refactoring core modules.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Roadmap
|
||||||
|
|
||||||
|
### MVP Scope
|
||||||
|
- Programs, Courses, Modules
|
||||||
|
- Vimeo videos
|
||||||
|
- Assessments & practices
|
||||||
|
- Progress tracking
|
||||||
|
- Admin publishing rules
|
||||||
|
|
||||||
|
### Phase 2
|
||||||
|
- AI-driven personalization
|
||||||
|
- Adaptive learning paths
|
||||||
|
- Gamification
|
||||||
|
- Certification engine
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Architectural Principle**
|
||||||
|
Clear separation between:
|
||||||
|
- Content
|
||||||
|
- Video
|
||||||
|
- Assessment
|
||||||
|
- Progress
|
||||||
|
- Analytics
|
||||||
|
|
||||||
|
Ensuring scalability, maintainability, and rapid feature expansion.
|
||||||
0
er_diagram.md
Normal file
0
er_diagram.md
Normal file
Loading…
Reference in New Issue
Block a user