# quartz1605/coursesellingwebsitebackend architecture

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

- Interactive diagram: https://gitdiagram.com/quartz1605/coursesellingwebsitebackend
- Repository: https://github.com/quartz1605/coursesellingwebsitebackend

## Overview

This is an Express REST backend for a course-selling platform. Users and admins sign up or log in, then use role-protected endpoints: admins manage courses, users browse and purchase them, and users retrieve purchases. The route modules own validation, authentication checks, and database operations; `db.js` defines the MongoDB models. The README documents the main capabilities, while the graph’s wiring is based on sampled source; the `/purchase` route is empty and is not shown as a working capability.

Main entry points: [`index.js`](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/index.js) (Express server), [`routes/user.js`](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/user.js) (User routes), [`routes/admin.js`](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/admin.js) (Admin routes), [`db.js`](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/db.js) (Data models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["HTTP entry"]
  node_server["Express server<br/>[index.js]"]
end

subgraph group_identity["Identity and access"]
  node_user_routes["User routes<br/>[user.js]"]
  node_admin_routes["Admin routes<br/>[admin.js]"]
  node_user_auth["User JWT guard<br/>[userMiddleware.js]"]
  node_admin_auth["Admin JWT guard<br/>[adminMiddleware.js]"]
  node_shared_auth["Shared JWT guard<br/>[middleware.js]"]
  node_jwt["JWT library"]
end

subgraph group_catalog["Course catalog"]
  node_course_routes["Course listing<br/>[courses.js]"]
end

subgraph group_purchases["Purchases and persistence"]
  node_models["Data models<br/>[db.js]"]
  node_mongo[("MongoDB")]
end

node_user(("User"))
node_admin(("Admin"))

node_user -->|"sends requests"| node_server
node_admin -->|"sends requests"| node_server
node_server -->|"mounts /user"| node_user_routes
node_server -->|"mounts /admin"| node_admin_routes
node_server -->|"mounts /"| node_course_routes
node_server -->|"connects"| node_mongo
node_user_routes -->|"guards requests"| node_user_auth
node_admin_routes -->|"guards requests"| node_admin_auth
node_course_routes -->|"guards listing"| node_shared_auth
node_user_auth -->|"verifies tokens"| node_jwt
node_admin_auth -->|"verifies tokens"| node_jwt
node_shared_auth -->|"verifies tokens"| node_jwt
node_user_routes -->|"signs login token"| node_jwt
node_admin_routes -->|"signs login token"| node_jwt
node_user_routes -->|"reads and writes"| node_models
node_admin_routes -->|"reads and writes"| node_models
node_course_routes -->|"reads courses"| node_models
node_models -->|"persists records"| node_mongo

click node_server "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/index.js"
click node_user_routes "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/user.js"
click node_admin_routes "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/admin.js"
click node_user_auth "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/userMiddleware.js"
click node_admin_auth "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/adminMiddleware.js"
click node_course_routes "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/courses.js"
click node_shared_auth "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/middleware.js"
click node_models "https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/db.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_server,node_user toneBlue
class node_user_routes,node_admin_routes,node_user_auth,node_admin_auth,node_shared_auth,node_jwt toneAmber
class node_course_routes toneMint
class node_models,node_mongo toneRose
class node_admin toneIndigo
```

## Components

### HTTP entry

- [Express server](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/index.js): `index.js`

### Identity and access

- [User routes](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/user.js): `routes/user.js`
- [Admin routes](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/admin.js): `routes/admin.js`
- [User JWT guard](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/userMiddleware.js): `middlewares/userMiddleware.js`
- [Admin JWT guard](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/adminMiddleware.js): `middlewares/adminMiddleware.js`
- [Shared JWT guard](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/middlewares/middleware.js): `middlewares/middleware.js`
- **JWT library**

### Course catalog

- [Course listing](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/routes/courses.js): `routes/courses.js`

### Purchases and persistence

- [Data models](https://github.com/quartz1605/coursesellingwebsitebackend/blob/main/db.js): `db.js`
- **MongoDB**

### Other components

- **User**
- **Admin**

## Connections

- User → Express server: sends requests
- Admin → Express server: sends requests
- Express server → User routes: mounts /user
- Express server → Admin routes: mounts /admin
- Express server → Course listing: mounts /
- Express server → MongoDB: connects
- User routes → User JWT guard: guards requests
- Admin routes → Admin JWT guard: guards requests
- Course listing → Shared JWT guard: guards listing
- User JWT guard → JWT library: verifies tokens
- Admin JWT guard → JWT library: verifies tokens
- Shared JWT guard → JWT library: verifies tokens
- User routes → JWT library: signs login token
- Admin routes → JWT library: signs login token
- User routes → Data models: reads and writes
- Admin routes → Data models: reads and writes
- Course listing → Data models: reads courses
- Data models → MongoDB: persists records
