# strongvu/vicourses-elearning-platform architecture

> Architecture diagram of the GitHub repository strongvu/vicourses-elearning-platform, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/strongvu/vicourses-elearning-platform
- Repository: https://github.com/strongvu/vicourses-elearning-platform

## Overview

Vicourses is a microservices e-learning platform: students browse courses and learn from video and quizzes, while instructors manage course curricula and admins manage users and courses. The backend also supports enrollment, ratings, wishlists, coupons, payments, search, and asynchronous video processing. The sampled course controller delegates course and enrollment operations to application services; other sampled controllers delegate their own features. The README documents broader client, instructor, and admin capabilities that are represented here at their directory level. Some subsystem links are documented capabilities rather than inspected call sites.

Main entry points: [`backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs`](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs) (Course API), [`backend/ApiGateway/Program.cs`](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/ApiGateway/Program.cs) (API gateway), [`backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs`](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs) (Wishlist API), [`backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs`](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs) (Ratings API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Client applications"]
  node_client["Client web"]
  node_adminweb["Admin web"]
  node_mobile["Mobile app"]
end

subgraph group_routing["API entry"]
  node_gateway["API gateway<br/>[Program.cs]"]
end

subgraph group_learning["Course learning"]
  node_courseapi["Course API"]
  node_courseservice["Course operations<br/>[CourseService.cs]"]
  node_curriculum["Curriculum management"]
  node_lessonmodel["Lesson domain<br/>[Lesson.cs]"]
  node_paging["Paging requests<br/>[PagingRequest.cs]"]
  node_enrollment["Enrollment repository"]
  node_courseevents["Course event handler"]
end

subgraph group_commerce["Commerce and discovery"]
  node_search["Course search"]
  node_wishlistapi["Wishlist API"]
  node_wishlistservice["Wishlist service<br/>[WishlistService.cs]"]
  node_wishlistmodel["Wishlist model<br/>[Wishlist.cs]"]
  node_ratingapi["Ratings API"]
  node_ratingservice["Rating service<br/>[RatingService.cs]"]
  node_ratingmodel["Rating model<br/>[Rating.cs]"]
  node_paymentapi["Payments API"]
  node_paymentservice["Payment service<br/>[PaymentService.cs]"]
  node_paymentmodel["Payment model<br/>[Payment.cs]"]
  node_coupons["Coupon management"]
end

subgraph group_platform["Platform integrations"]
  node_videoevents["Video event contracts"]
  node_storageevents["Storage event contracts"]
  node_videoprocessing["Video processing"]
  node_storage["File storage"]
  node_elasticsearch[("Elasticsearch")]
  node_paypal["PayPal"]
  node_email["Email service"]
  node_mongodb[("MongoDB")]
end

node_students(("Students"))
node_instructors(("Instructors"))
node_admins(("Administrators"))

node_students -.->|"use"| node_client
node_instructors -.->|"manage courses"| node_client
node_admins -.->|"manage platform"| node_adminweb
node_students -.->|"learn"| node_mobile
node_client -.->|"request APIs"| node_gateway
node_adminweb -.->|"request APIs"| node_gateway
node_mobile -.->|"request APIs"| node_gateway
node_gateway -.->|"routes requests"| node_courseapi
node_courseapi -->|"delegates course operations"| node_courseservice
node_courseapi -->|"requests curriculum"| node_curriculum
node_courseapi -.->|"checks enrollment"| node_enrollment
node_enrollment -->|"reads and counts"| node_mongodb
node_courseapi -.->|"accepts paging"| node_paging
node_courseevents -->|"publishes processing request"| node_videoevents
node_courseevents -->|"publishes file deletion"| node_storageevents
node_videoevents -.->|"requests processing"| node_videoprocessing
node_storageevents -.->|"requests deletion"| node_storage
node_search -->|"searches index"| node_elasticsearch
node_wishlistapi -->|"delegates wishlist operations"| node_wishlistservice
node_wishlistapi -->|"returns wishlist data"| node_wishlistmodel
node_ratingapi -->|"delegates rating operations"| node_ratingservice
node_ratingapi -.->|"returns rating data"| node_ratingmodel
node_paymentapi -->|"delegates payment operations"| node_paymentservice
node_paymentapi -.->|"returns payment data"| node_paymentmodel
node_paymentservice -.->|"processes payments"| node_paypal
node_coupons -.->|"applies discounts"| node_paymentservice
node_courseapi -.->|"exposes course ratings"| node_ratingapi
node_courseapi -.->|"supports wishlisting"| node_wishlistapi
node_email -.->|"sends notices"| node_students

click node_client "https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_client_web"
click node_adminweb "https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_admin_web"
click node_mobile "https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_mobile_app"
click node_gateway "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/ApiGateway/Program.cs"
click node_courseapi "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs"
click node_courseservice "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/Services/CourseService.cs"
click node_curriculum "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/Services/CourseCurriculumService.cs"
click node_lessonmodel "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Domain/Models/Lesson.cs"
click node_paging "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.API/Requests/PagingRequest.cs"
click node_enrollment "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Infrastructure/Repositories/EnrollmentRepository.cs"
click node_courseevents "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/DomainEventHandlers/Course/CoursePreviewVideoUpdatedDomainEventHandler.cs"
click node_videoevents "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/IntegrationEvents/VideoProcessing/RequestVideoProcessingIntegrationEvent.cs"
click node_storageevents "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/IntegrationEvents/Storage/DeleteFilesIntegrationEvent.cs"
click node_videoprocessing "https://github.com/strongvu/vicourses-elearning-platform/tree/main/backend/services/video_processing_service"
click node_storage "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/storage_service/src/services/s3-upload.service.ts"
click node_search "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/SearchService/SearchService.API/Application/Services/CoursesQueryService.cs"
click node_wishlistapi "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs"
click node_wishlistservice "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Application/Services/WishlistService.cs"
click node_wishlistmodel "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Models/Wishlist.cs"
click node_ratingapi "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs"
click node_ratingservice "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Application/Services/RatingService.cs"
click node_ratingmodel "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Models/Rating.cs"
click node_paymentapi "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Controllers/PaymentsController.cs"
click node_paymentservice "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Application/Services/PaymentService.cs"
click node_paymentmodel "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Models/Payment.cs"
click node_coupons "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/DiscountService/DiscountService.API/Controllers/CouponsController.cs"
click node_email "https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/email_service/src/controllers/healthchecks.controller.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client,node_adminweb,node_mobile toneBlue
class node_gateway toneAmber
class node_courseapi,node_courseservice,node_curriculum,node_lessonmodel,node_paging,node_enrollment,node_courseevents toneMint
class node_search,node_wishlistapi,node_wishlistservice,node_wishlistmodel,node_ratingapi,node_ratingservice,node_ratingmodel,node_paymentapi,node_paymentservice,node_paymentmodel,node_coupons toneRose
class node_videoevents,node_storageevents,node_videoprocessing,node_storage,node_elasticsearch,node_paypal,node_email,node_mongodb,node_students,node_instructors,node_admins toneIndigo
```

## Components

### Client applications

- [Client web](https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_client_web): `frontend/vicourses_client_web`
- [Admin web](https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_admin_web): `frontend/vicourses_admin_web`
- [Mobile app](https://github.com/strongvu/vicourses-elearning-platform/tree/main/frontend/vicourses_mobile_app): `frontend/vicourses_mobile_app`

### API entry

- [API gateway](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/ApiGateway/Program.cs): `backend/ApiGateway/Program.cs`

### Course learning

- [Course API](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs): `backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs`
- [Course operations](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/Services/CourseService.cs): `backend/services/CourseService/CourseService.Application/Services/CourseService.cs`
- [Curriculum management](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/Services/CourseCurriculumService.cs): `backend/services/CourseService/CourseService.Application/Services/CourseCurriculumService.cs`
- [Lesson domain](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Domain/Models/Lesson.cs): `backend/services/CourseService/CourseService.Domain/Models/Lesson.cs`
- [Paging requests](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.API/Requests/PagingRequest.cs): `backend/services/CourseService/CourseService.API/Requests/PagingRequest.cs`
- [Enrollment repository](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Infrastructure/Repositories/EnrollmentRepository.cs): `backend/services/CourseService/CourseService.Infrastructure/Repositories/EnrollmentRepository.cs`
- [Course event handler](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/DomainEventHandlers/Course/CoursePreviewVideoUpdatedDomainEventHandler.cs): `backend/services/CourseService/CourseService.Application/DomainEventHandlers/Course/CoursePreviewVideoUpdatedDomainEventHandler.cs`

### Commerce and discovery

- [Course search](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/SearchService/SearchService.API/Application/Services/CoursesQueryService.cs): `backend/services/SearchService/SearchService.API/Application/Services/CoursesQueryService.cs`
- [Wishlist API](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs): `backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs`
- [Wishlist service](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Application/Services/WishlistService.cs): `backend/services/WishlistService/WishlistService.API/Application/Services/WishlistService.cs`
- [Wishlist model](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/WishlistService/WishlistService.API/Models/Wishlist.cs): `backend/services/WishlistService/WishlistService.API/Models/Wishlist.cs`
- [Ratings API](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs): `backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs`
- [Rating service](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Application/Services/RatingService.cs): `backend/services/RatingService/RatingService.API/Application/Services/RatingService.cs`
- [Rating model](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/RatingService/RatingService.API/Models/Rating.cs): `backend/services/RatingService/RatingService.API/Models/Rating.cs`
- [Payments API](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Controllers/PaymentsController.cs): `backend/services/PaymentService/PaymentService.API/Controllers/PaymentsController.cs`
- [Payment service](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Application/Services/PaymentService.cs): `backend/services/PaymentService/PaymentService.API/Application/Services/PaymentService.cs`
- [Payment model](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/PaymentService/PaymentService.API/Models/Payment.cs): `backend/services/PaymentService/PaymentService.API/Models/Payment.cs`
- [Coupon management](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/DiscountService/DiscountService.API/Controllers/CouponsController.cs): `backend/services/DiscountService/DiscountService.API/Controllers/CouponsController.cs`

### Platform integrations

- [Video event contracts](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/IntegrationEvents/VideoProcessing/RequestVideoProcessingIntegrationEvent.cs): `backend/services/CourseService/CourseService.Application/IntegrationEvents/VideoProcessing/RequestVideoProcessingIntegrationEvent.cs`
- [Storage event contracts](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/CourseService/CourseService.Application/IntegrationEvents/Storage/DeleteFilesIntegrationEvent.cs): `backend/services/CourseService/CourseService.Application/IntegrationEvents/Storage/DeleteFilesIntegrationEvent.cs`
- [Video processing](https://github.com/strongvu/vicourses-elearning-platform/tree/main/backend/services/video_processing_service): `backend/services/video_processing_service`
- [File storage](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/storage_service/src/services/s3-upload.service.ts): `backend/services/storage_service/src/services/s3-upload.service.ts`
- **Elasticsearch**
- **PayPal**
- [Email service](https://github.com/strongvu/vicourses-elearning-platform/blob/main/backend/services/email_service/src/controllers/healthchecks.controller.ts): `backend/services/email_service/src/controllers/healthchecks.controller.ts`
- **MongoDB**

### Other components

- **Students**
- **Instructors**
- **Administrators**

## Connections

- Students → Client web: use
- Instructors → Client web: manage courses
- Administrators → Admin web: manage platform
- Students → Mobile app: learn
- Client web → API gateway: request APIs
- Admin web → API gateway: request APIs
- Mobile app → API gateway: request APIs
- API gateway → Course API: routes requests
- Course API → Course operations: delegates course operations (evidence: `backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs`)
- Course API → Curriculum management: requests curriculum (evidence: `backend/services/CourseService/CourseService.API/Controllers/CoursesController.cs`)
- Course API → Enrollment repository: checks enrollment
- Enrollment repository → MongoDB: reads and counts (evidence: `backend/services/CourseService/CourseService.Infrastructure/Repositories/EnrollmentRepository.cs`)
- Course API → Paging requests: accepts paging
- Course event handler → Video event contracts: publishes processing request (evidence: `backend/services/CourseService/CourseService.Application/DomainEventHandlers/Course/CoursePreviewVideoUpdatedDomainEventHandler.cs`)
- Course event handler → Storage event contracts: publishes file deletion (evidence: `backend/services/CourseService/CourseService.Application/DomainEventHandlers/Course/CoursePreviewVideoUpdatedDomainEventHandler.cs`)
- Video event contracts → Video processing: requests processing
- Storage event contracts → File storage: requests deletion
- Course search → Elasticsearch: searches index (evidence: `backend/services/SearchService/SearchService.API/Application/Services/CoursesQueryService.cs`)
- Wishlist API → Wishlist service: delegates wishlist operations (evidence: `backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs`)
- Wishlist API → Wishlist model: returns wishlist data (evidence: `backend/services/WishlistService/WishlistService.API/Controllers/WishlistController.cs`)
- Ratings API → Rating service: delegates rating operations (evidence: `backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs`)
- Ratings API → Rating model: returns rating data (evidence: `backend/services/RatingService/RatingService.API/Controllers/RatingsController.cs`)
- Payments API → Payment service: delegates payment operations (evidence: `backend/services/PaymentService/PaymentService.API/Controllers/PaymentsController.cs`)
- Payments API → Payment model: returns payment data (evidence: `backend/services/PaymentService/PaymentService.API/Controllers/PaymentsController.cs`)
- Payment service → PayPal: processes payments
- Coupon management → Payment service: applies discounts
- Course API → Ratings API: exposes course ratings
- Course API → Wishlist API: supports wishlisting
- Email service → Students: sends notices
