# ajaydewangan1100/lms_backend_practice architecture

> Architecture diagram of the GitHub repository ajaydewangan1100/lms_backend_practice, 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/ajaydewangan1100/lms_backend_practice
- Repository: https://github.com/ajaydewangan1100/lms_backend_practice

## Overview

This repository is an Express backend for a video-based learning management system. A client request enters through the app’s mounted API routes; user routes support registration, sign-in and account recovery, while course routes expose course and lecture operations, including subscriber-gated lectures. Learners can create, verify and cancel subscriptions; administrators can view payment and user statistics. An internal authorization layer applies cookie/JWT authentication and role or subscriber checks, while persistence, media uploads and contact email use external services. The user controller’s detailed implementation was not sampled; its documented capabilities are represented without inferring its internal calls.

Main entry points: [`app.js`](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/app.js) (Express app), [`middlewares/auth.middleware.js`](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/middlewares/auth.middleware.js) (Auth middleware), [`models/user.model.js`](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/user.model.js) (User model), [`routes/user.routes.js`](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/user.routes.js) (User routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry"]
  node_app["Express app<br/>[app.js]"]
end

subgraph group_identity["Identity and access"]
  node_user_routes["User routes<br/>[user.routes.js]"]
  node_user_controller["User controller"]
  node_auth["Auth middleware<br/>[auth.middleware.js]"]
  node_user_model["User model<br/>[user.model.js]"]
end

subgraph group_learning["Courses and lectures"]
  node_course_routes["Course routes<br/>[course.routes.js]"]
  node_course_controller["Course controller"]
  node_course_model["Course model<br/>[course.model.js]"]
  node_upload["Upload middleware"]
end

subgraph group_billing["Billing and administration"]
  node_payment_routes["Payment routes<br/>[payment.routes.js]"]
  node_payment_controller["Payment controller"]
  node_payment_model["Payment model<br/>[payment.model.js]"]
end

subgraph group_support["Contact support"]
  node_misc_routes["Misc routes"]
  node_misc_controller["Misc controller"]
  node_email_sender["Email sender<br/>[sendEmail.js]"]
end

node_client(("API client"))
node_database[("MongoDB")]
node_cloudinary["Cloudinary"]
node_razorpay["Razorpay"]
node_mail_service["Mail service"]

node_client -->|"sends requests"| node_app
node_app -->|"mounts user API"| node_user_routes
node_app -->|"mounts course API"| node_course_routes
node_app -->|"mounts payment API"| node_payment_routes
node_app -->|"mounts misc API"| node_misc_routes
node_user_routes -->|"checks access"| node_auth
node_user_routes -->|"processes avatars"| node_upload
node_user_routes -->|"dispatches"| node_user_controller
node_user_controller -->|"account operations"| node_user_model
node_user_model -->|"reads and writes"| node_database
node_course_routes -->|"checks access"| node_auth
node_course_routes -->|"processes media"| node_upload
node_course_routes -->|"dispatches"| node_course_controller
node_course_controller -->|"course operations"| node_course_model
node_course_model -->|"reads and writes"| node_database
node_course_controller -->|"uploads media"| node_cloudinary
node_payment_routes -->|"checks access"| node_auth
node_payment_routes -->|"dispatches"| node_payment_controller
node_payment_controller -->|"updates subscription"| node_user_model
node_payment_controller -->|"records payment"| node_payment_model
node_payment_model -->|"writes payment"| node_database
node_payment_controller -->|"manages subscriptions"| node_razorpay
node_misc_routes -->|"checks admin access"| node_auth
node_misc_routes -->|"dispatches"| node_misc_controller
node_misc_controller -->|"counts users"| node_user_model
node_misc_controller -->|"sends contact email"| node_email_sender
node_email_sender -->|"delivers email"| node_mail_service
node_auth -->|"checks subscriber"| node_user_model

click node_app "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/app.js"
click node_user_routes "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/user.routes.js"
click node_user_controller "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/user.controlller.js"
click node_auth "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/middlewares/auth.middleware.js"
click node_user_model "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/user.model.js"
click node_course_routes "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/course.routes.js"
click node_course_controller "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/course.controller.js"
click node_course_model "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/course.model.js"
click node_upload "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/middlewares/multer.middleware.js"
click node_payment_routes "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/payment.routes.js"
click node_payment_controller "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/payment.controller.js"
click node_payment_model "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/payment.model.js"
click node_misc_routes "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/miscellaneous.routes.js"
click node_misc_controller "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/miscellaneous.controller.js"
click node_email_sender "https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/utils/sendEmail.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_app,node_client toneBlue
class node_user_routes,node_user_controller,node_auth,node_user_model,node_database toneAmber
class node_course_routes,node_course_controller,node_course_model,node_upload toneMint
class node_payment_routes,node_payment_controller,node_payment_model toneRose
class node_misc_routes,node_misc_controller,node_email_sender,node_cloudinary,node_razorpay,node_mail_service toneIndigo
```

## Components

### API entry

- [Express app](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/app.js): `app.js`

### Identity and access

- [User routes](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/user.routes.js): `routes/user.routes.js`
- [User controller](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/user.controlller.js): `controllers/user.controlller.js`
- [Auth middleware](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/middlewares/auth.middleware.js): `middlewares/auth.middleware.js`
- [User model](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/user.model.js): `models/user.model.js`

### Courses and lectures

- [Course routes](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/course.routes.js): `routes/course.routes.js`
- [Course controller](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/course.controller.js): `controllers/course.controller.js`
- [Course model](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/course.model.js): `models/course.model.js`
- [Upload middleware](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/middlewares/multer.middleware.js): `middlewares/multer.middleware.js`

### Billing and administration

- [Payment routes](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/payment.routes.js): `routes/payment.routes.js`
- [Payment controller](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/payment.controller.js): `controllers/payment.controller.js`
- [Payment model](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/models/payment.model.js): `models/payment.model.js`

### Contact support

- [Misc routes](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/routes/miscellaneous.routes.js): `routes/miscellaneous.routes.js`
- [Misc controller](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/controllers/miscellaneous.controller.js): `controllers/miscellaneous.controller.js`
- [Email sender](https://github.com/ajaydewangan1100/lms_backend_practice/blob/main/utils/sendEmail.js): `utils/sendEmail.js`

### Other components

- **API client**
- **MongoDB**
- **Cloudinary**
- **Razorpay**
- **Mail service**

## Connections

- API client → Express app: sends requests
- Express app → User routes: mounts user API
- Express app → Course routes: mounts course API
- Express app → Payment routes: mounts payment API
- Express app → Misc routes: mounts misc API
- User routes → Auth middleware: checks access
- User routes → Upload middleware: processes avatars
- User routes → User controller: dispatches
- User controller → User model: account operations
- User model → MongoDB: reads and writes
- Course routes → Auth middleware: checks access
- Course routes → Upload middleware: processes media
- Course routes → Course controller: dispatches
- Course controller → Course model: course operations
- Course model → MongoDB: reads and writes
- Course controller → Cloudinary: uploads media
- Payment routes → Auth middleware: checks access
- Payment routes → Payment controller: dispatches
- Payment controller → User model: updates subscription
- Payment controller → Payment model: records payment
- Payment model → MongoDB: writes payment
- Payment controller → Razorpay: manages subscriptions
- Misc routes → Auth middleware: checks admin access
- Misc routes → Misc controller: dispatches
- Misc controller → User model: counts users
- Misc controller → Email sender: sends contact email
- Email sender → Mail service: delivers email
- Auth middleware → User model: checks subscriber
