# hiteshdotcom/courseapp-backend architecture

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

## Overview

This is a Node/Express backend for an online course platform. Clients reach user, course, payment, and order endpoints; routes dispatch to controllers, which perform authentication, account/course operations, payments, and order handling. Controllers use Mongoose models for users, courses, and orders. The sampled code also shows course search/filtering, reviews and admin management, profile/media uploads, and password-reset email. The README is empty; unsampled route and database wiring is represented only where supported by the source index.

Main entry points: [`app.js`](https://github.com/hiteshdotcom/courseapp-backend/blob/main/app.js) (Express app), [`controllers/userController.js`](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/userController.js) (Account controller), [`controllers/courseController.js`](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/courseController.js) (Course controller), [`middlewares/user.js`](https://github.com/hiteshdotcom/courseapp-backend/blob/main/middlewares/user.js) (JWT auth)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_app["Express app<br/>[app.js]"]
  node_user_routes["User routes<br/>[user.js]"]
  node_course_routes["Course routes<br/>[course.js]"]
  node_payment_routes["Payment routes<br/>[payment.js]"]
  node_order_routes["Order routes<br/>[order.js]"]
end

subgraph group_identity["Identity"]
  node_user_controller["Account controller<br/>[userController.js]"]
  node_auth["JWT auth<br/>[user.js]"]
  node_user_model[("User model<br/>[user.js]")]
  node_cookie["Token cookies<br/>[cookieToken.js]"]
  node_email["Reset email<br/>[emailHelper.js]"]
end

subgraph group_learning["Course platform"]
  node_course_controller["Course controller"]
  node_course_model[("Course model<br/>[course.js]")]
  node_query["Search and paging<br/>[whereClause.js]"]
end

subgraph group_commerce["Commerce"]
  node_payment_controller["Payment controller"]
  node_order_controller["Order controller<br/>[orderController.js]"]
  node_order_model[("Order model<br/>[order.js]")]
end

node_client(("API client"))
node_media["Cloud media"]
node_stripe["Stripe"]
node_razorpay["Razorpay"]
node_mongo[("MongoDB")]

node_client -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_user_routes
node_app -->|"mounts routes"| node_course_routes
node_app -->|"mounts routes"| node_payment_routes
node_app -->|"mounts routes"| node_order_routes
node_user_routes -->|"dispatches to"| node_user_controller
node_user_routes -->|"checks login"| node_auth
node_course_routes -->|"dispatches to"| node_course_controller
node_course_routes -->|"checks roles"| node_auth
node_payment_routes -->|"dispatches to"| node_payment_controller
node_payment_routes -->|"checks login"| node_auth
node_order_routes -->|"dispatches to"| node_order_controller
node_order_routes -->|"checks login"| node_auth
node_user_controller -->|"reads and writes"| node_user_model
node_user_controller -->|"issues tokens"| node_cookie
node_user_controller -->|"sends reset email"| node_email
node_user_controller -->|"uploads photos"| node_media
node_auth -->|"loads user"| node_user_model
node_course_controller -->|"reads and writes"| node_course_model
node_course_controller -->|"populates owner"| node_user_model
node_course_controller -->|"filters listings"| node_query
node_course_controller -->|"uploads course files"| node_media
node_payment_controller -->|"creates intents"| node_stripe
node_payment_controller -->|"creates orders"| node_razorpay
node_order_controller -->|"reads and writes"| node_order_model
node_user_model -.->|"persists records"| node_mongo
node_course_model -.->|"persists records"| node_mongo
node_order_model -.->|"persists records"| node_mongo

click node_app "https://github.com/hiteshdotcom/courseapp-backend/blob/main/app.js"
click node_user_routes "https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/user.js"
click node_course_routes "https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/course.js"
click node_payment_routes "https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/payment.js"
click node_order_routes "https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/order.js"
click node_user_controller "https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/userController.js"
click node_auth "https://github.com/hiteshdotcom/courseapp-backend/blob/main/middlewares/user.js"
click node_user_model "https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/user.js"
click node_cookie "https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/cookieToken.js"
click node_email "https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/emailHelper.js"
click node_course_controller "https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/courseController.js"
click node_course_model "https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/course.js"
click node_query "https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/whereClause.js"
click node_payment_controller "https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/paymentController.js"
click node_order_controller "https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/orderController.js"
click node_order_model "https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/order.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_user_routes,node_course_routes,node_payment_routes,node_order_routes,node_client toneBlue
class node_user_controller,node_auth,node_user_model,node_cookie,node_email,node_mongo toneAmber
class node_course_controller,node_course_model,node_query toneMint
class node_payment_controller,node_order_controller,node_order_model toneRose
class node_media,node_stripe,node_razorpay toneIndigo
```

## Components

### API entry

- [Express app](https://github.com/hiteshdotcom/courseapp-backend/blob/main/app.js): `app.js`
- [User routes](https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/user.js): `routes/user.js`
- [Course routes](https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/course.js): `routes/course.js`
- [Payment routes](https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/payment.js): `routes/payment.js`
- [Order routes](https://github.com/hiteshdotcom/courseapp-backend/blob/main/routes/order.js): `routes/order.js`

### Identity

- [Account controller](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/userController.js): `controllers/userController.js`
- [JWT auth](https://github.com/hiteshdotcom/courseapp-backend/blob/main/middlewares/user.js): `middlewares/user.js`
- [User model](https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/user.js): `model/user.js`
- [Token cookies](https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/cookieToken.js): `utils/cookieToken.js`
- [Reset email](https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/emailHelper.js): `utils/emailHelper.js`

### Course platform

- [Course controller](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/courseController.js): `controllers/courseController.js`
- [Course model](https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/course.js): `model/course.js`
- [Search and paging](https://github.com/hiteshdotcom/courseapp-backend/blob/main/utils/whereClause.js): `utils/whereClause.js`

### Commerce

- [Payment controller](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/paymentController.js): `controllers/paymentController.js`
- [Order controller](https://github.com/hiteshdotcom/courseapp-backend/blob/main/controllers/orderController.js): `controllers/orderController.js`
- [Order model](https://github.com/hiteshdotcom/courseapp-backend/blob/main/model/order.js): `model/order.js`

### Other components

- **API client**
- **Cloud media**
- **Stripe**
- **Razorpay**
- **MongoDB**

## Connections

- API client → Express app: sends requests (evidence: `app.js`)
- Express app → User routes: mounts routes (evidence: `app.js`)
- Express app → Course routes: mounts routes (evidence: `app.js`)
- Express app → Payment routes: mounts routes (evidence: `app.js`)
- Express app → Order routes: mounts routes (evidence: `app.js`)
- User routes → Account controller: dispatches to (evidence: `routes/user.js`)
- User routes → JWT auth: checks login (evidence: `routes/user.js`)
- Course routes → Course controller: dispatches to (evidence: `routes/course.js`)
- Course routes → JWT auth: checks roles (evidence: `routes/course.js`)
- Payment routes → Payment controller: dispatches to (evidence: `routes/payment.js`)
- Payment routes → JWT auth: checks login (evidence: `routes/payment.js`)
- Order routes → Order controller: dispatches to (evidence: `routes/order.js`)
- Order routes → JWT auth: checks login (evidence: `routes/order.js`)
- Account controller → User model: reads and writes (evidence: `controllers/userController.js`)
- Account controller → Token cookies: issues tokens (evidence: `controllers/userController.js`)
- Account controller → Reset email: sends reset email (evidence: `controllers/userController.js`)
- Account controller → Cloud media: uploads photos (evidence: `controllers/userController.js`)
- JWT auth → User model: loads user (evidence: `middlewares/user.js`)
- Course controller → Course model: reads and writes (evidence: `controllers/courseController.js`)
- Course controller → User model: populates owner (evidence: `controllers/courseController.js`)
- Course controller → Search and paging: filters listings (evidence: `controllers/courseController.js`)
- Course controller → Cloud media: uploads course files (evidence: `controllers/courseController.js`)
- Payment controller → Stripe: creates intents (evidence: `controllers/paymentController.js`)
- Payment controller → Razorpay: creates orders (evidence: `controllers/paymentController.js`)
- Order controller → Order model: reads and writes (evidence: `controllers/orderController.js`)
- User model → MongoDB: persists records
- Course model → MongoDB: persists records
- Order model → MongoDB: persists records
