# faisalgul786/skillgrid_backend architecture

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

- Interactive diagram: https://gitdiagram.com/faisalgul786/skillgrid_backend
- Repository: https://github.com/faisalgul786/skillgrid_backend

## Overview

This is a backend for a learning-management platform: users register and authenticate, enroll in courses, and access learning content; instructors create courses, lessons, quizzes, and assignments, while students submit work and instructors grade it. The sampled code confirms enrollment and authentication service/repository flows, plus controller-to-service calls for the other learning features. Wiring from the application entry point and several unsampled routes is not established here, so those connections are omitted.

Main entry points: [`src/modules/authentication/services/auth-service.js`](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/services/auth-service.js) (Auth service), [`src/modules/authentication/repositories/auth-repository.js`](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/repositories/auth-repository.js) (Auth repository), [`src/modules/enrollment/routes/enrollment-routes.js`](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/routes/enrollment-routes.js) (Enrollment routes), [`src/modules/authentication/controllers/auth-controller.js`](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/controllers/auth-controller.js) (Auth controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_platform["Platform access"]
  node_auth_controller["Auth controller<br/>[auth-controller.js]"]
  node_auth_service["Auth service<br/>[auth-service.js]"]
  node_auth_repo["Auth repository<br/>[auth-repository.js]"]
  node_auth_middleware["Authentication middleware<br/>[authenticate.js]"]
end

subgraph group_learning["Course learning"]
  node_enroll_routes["Enrollment routes"]
  node_enroll_controller["Enrollment controller"]
  node_enroll_service["Enrollment service"]
  node_enroll_repo["Enrollment repository"]
  node_course_controller["Course controller"]
  node_course_service["Course service"]
  node_lesson_controller["Lesson controller"]
  node_lesson_service["Lesson service"]
end

subgraph group_assessment["Assessment work"]
  node_quiz_controller["Quiz controller"]
  node_quiz_service["Quiz service"]
  node_assignment_controller["Assignment controller"]
  node_assignment_service["Assignment service"]
end

subgraph group_infrastructure["Shared services"]
  node_db[("SQL database<br/>[db-connection.js]")]
  node_redis[("Upstash Redis<br/>[upstash-client.js]")]
  node_email["Email service<br/>[send-email.js]"]
end

node_learner(("Learner"))
node_instructor(("Instructor"))

node_learner -->|"requests enrollment"| node_enroll_routes
node_enroll_routes -->|"authenticates"| node_auth_middleware
node_enroll_routes -->|"dispatches"| node_enroll_controller
node_enroll_controller -->|"calls"| node_enroll_service
node_enroll_service -->|"checks and creates"| node_enroll_repo
node_enroll_repo -->|"reads and writes"| node_db
node_learner -->|"registers or logs in"| node_auth_controller
node_instructor -->|"registers or logs in"| node_auth_controller
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"calls"| node_auth_repo
node_auth_repo -->|"reads and writes"| node_db
node_auth_repo -->|"stores temporary data"| node_redis
node_auth_service -->|"sends OTP"| node_email
node_instructor -->|"manages courses"| node_course_controller
node_course_controller -->|"calls"| node_course_service
node_learner -->|"browses courses"| node_course_controller
node_learner -->|"accesses lessons"| node_lesson_controller
node_instructor -->|"creates lessons"| node_lesson_controller
node_lesson_controller -->|"calls"| node_lesson_service
node_instructor -->|"creates quizzes"| node_quiz_controller
node_learner -->|"takes quizzes"| node_quiz_controller
node_quiz_controller -->|"calls"| node_quiz_service
node_instructor -->|"creates and grades"| node_assignment_controller
node_learner -->|"views and submits"| node_assignment_controller
node_assignment_controller -->|"calls"| node_assignment_service

click node_enroll_routes "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/routes/enrollment-routes.js"
click node_enroll_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/controllers/enrollment-controller.js"
click node_enroll_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/services/enrollment-service.js"
click node_enroll_repo "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/repositories/enrollment-repository.js"
click node_auth_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/controllers/auth-controller.js"
click node_auth_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/services/auth-service.js"
click node_auth_repo "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/repositories/auth-repository.js"
click node_course_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/course_management/controllers/course-management-controller.js"
click node_course_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/course_management/services/course-management-service.js"
click node_lesson_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/lesson_management/controllers/lesson-management-controller.js"
click node_lesson_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/lesson_management/services/lesson-management-service.js"
click node_quiz_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/quiz_management/controllers/quiz-management-controller.js"
click node_quiz_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/quiz_management/services/quiz-management-service.js"
click node_assignment_controller "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/assignment_management/controllers/assignment-management-controller.js"
click node_assignment_service "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/assignment_management/services/assignment-management-service.js"
click node_db "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/database/config/db-connection.js"
click node_redis "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/redis_database/upstash-client.js"
click node_email "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/external_services/email_service/send-email.js"
click node_auth_middleware "https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/middleware/authenticate.js"

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_auth_controller,node_auth_service,node_auth_repo,node_auth_middleware toneBlue
class node_enroll_routes,node_enroll_controller,node_enroll_service,node_enroll_repo,node_course_controller,node_course_service,node_lesson_controller,node_lesson_service toneAmber
class node_quiz_controller,node_quiz_service,node_assignment_controller,node_assignment_service toneMint
class node_db,node_redis,node_email toneRose
class node_learner,node_instructor toneIndigo
```

## Components

### Platform access

- [Auth controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/controllers/auth-controller.js): `src/modules/authentication/controllers/auth-controller.js`
- [Auth service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/services/auth-service.js): `src/modules/authentication/services/auth-service.js`
- [Auth repository](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/authentication/repositories/auth-repository.js): `src/modules/authentication/repositories/auth-repository.js`
- [Authentication middleware](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/middleware/authenticate.js): `src/shared/middleware/authenticate.js`

### Course learning

- [Enrollment routes](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/routes/enrollment-routes.js): `src/modules/enrollment/routes/enrollment-routes.js`
- [Enrollment controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/controllers/enrollment-controller.js): `src/modules/enrollment/controllers/enrollment-controller.js`
- [Enrollment service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/services/enrollment-service.js): `src/modules/enrollment/services/enrollment-service.js`
- [Enrollment repository](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/enrollment/repositories/enrollment-repository.js): `src/modules/enrollment/repositories/enrollment-repository.js`
- [Course controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/course_management/controllers/course-management-controller.js): `src/modules/course_management/controllers/course-management-controller.js`
- [Course service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/course_management/services/course-management-service.js): `src/modules/course_management/services/course-management-service.js`
- [Lesson controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/lesson_management/controllers/lesson-management-controller.js): `src/modules/lesson_management/controllers/lesson-management-controller.js`
- [Lesson service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/lesson_management/services/lesson-management-service.js): `src/modules/lesson_management/services/lesson-management-service.js`

### Assessment work

- [Quiz controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/quiz_management/controllers/quiz-management-controller.js): `src/modules/quiz_management/controllers/quiz-management-controller.js`
- [Quiz service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/quiz_management/services/quiz-management-service.js): `src/modules/quiz_management/services/quiz-management-service.js`
- [Assignment controller](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/assignment_management/controllers/assignment-management-controller.js): `src/modules/assignment_management/controllers/assignment-management-controller.js`
- [Assignment service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/modules/assignment_management/services/assignment-management-service.js): `src/modules/assignment_management/services/assignment-management-service.js`

### Shared services

- [SQL database](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/database/config/db-connection.js): `src/shared/database/config/db-connection.js`
- [Upstash Redis](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/shared/redis_database/upstash-client.js): `src/shared/redis_database/upstash-client.js`
- [Email service](https://github.com/faisalgul786/skillgrid_backend/blob/main/src/external_services/email_service/send-email.js): `src/external_services/email_service/send-email.js`

### Other components

- **Learner**
- **Instructor**

## Connections

- Learner → Enrollment routes: requests enrollment
- Enrollment routes → Authentication middleware: authenticates
- Enrollment routes → Enrollment controller: dispatches
- Enrollment controller → Enrollment service: calls
- Enrollment service → Enrollment repository: checks and creates
- Enrollment repository → SQL database: reads and writes
- Learner → Auth controller: registers or logs in
- Instructor → Auth controller: registers or logs in
- Auth controller → Auth service: calls
- Auth service → Auth repository: calls
- Auth repository → SQL database: reads and writes
- Auth repository → Upstash Redis: stores temporary data
- Auth service → Email service: sends OTP
- Instructor → Course controller: manages courses
- Course controller → Course service: calls
- Learner → Course controller: browses courses
- Learner → Lesson controller: accesses lessons
- Instructor → Lesson controller: creates lessons
- Lesson controller → Lesson service: calls
- Instructor → Quiz controller: creates quizzes
- Learner → Quiz controller: takes quizzes
- Quiz controller → Quiz service: calls
- Instructor → Assignment controller: creates and grades
- Learner → Assignment controller: views and submits
- Assignment controller → Assignment service: calls
