# jaspreet29kalra/youtube architecture

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

- Interactive diagram: https://gitdiagram.com/jaspreet29kalra/youtube
- Repository: https://github.com/jaspreet29kalra/youtube

## Overview

FB-Project is a YouTube-oriented Express API. The shown user workflow runs from HTTP routes through optional authentication and file-upload middleware to account controllers, which read or update user records and return structured responses; uploaded images are sent to Cloudinary. Startup connects MongoDB before listening. The tree also shows video, comment, like, playlist, subscription, and tweet models, but their runtime relationships are not shown. The README is empty, so these boundaries reflect the available source excerpts and tree.

Main entry points: [`FB-Project/src/controllers/user.controller.js`](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/controllers/user.controller.js) (Account controller), [`FB-Project/src/routes/user.routes.js`](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/routes/user.routes.js) (User routes), [`FB-Project/src/middlewares/auth.middleware.js`](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/middlewares/auth.middleware.js) (JWT authentication), [`FB-Project/src/utils/cloudinary.js`](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/cloudinary.js) (Cloudinary uploader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and startup"]
  node_server["Express app<br/>[app.js]"]
  node_user_routes["User routes<br/>[user.routes.js]"]
  node_startup["Server startup<br/>[index.js]"]
  node_async_handler["Async wrapper<br/>[asyncHandler.js]"]
  node_api_response["API response<br/>[ApiResponse.js]"]
  node_api_error["API errors<br/>[ApiError.js]"]
end

subgraph group_accounts["Account workflows"]
  node_user_controller["Account controller<br/>[user.controller.js]"]
  node_auth["JWT authentication<br/>[auth.middleware.js]"]
end

subgraph group_media["Media handling"]
  node_multer["File intake"]
  node_temp_files["Temporary files"]
  node_cloudinary_helper["Cloudinary uploader<br/>[cloudinary.js]"]
  node_cloudinary["Cloudinary"]
end

subgraph group_data["Persistence and domain"]
  node_db_connect["DB connection<br/>[index.js]"]
  node_mongo[("MongoDB")]
  node_user_model[("User records<br/>[user.model.js]")]
  node_domain_models[("Content records")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_user_routes
node_startup -->|"connects first"| node_db_connect
node_startup -->|"starts listener"| node_server
node_db_connect -->|"connects to"| node_mongo
node_user_routes -->|"dispatches requests"| node_user_controller
node_user_routes -->|"protects routes"| node_auth
node_user_routes -->|"parses uploads"| node_multer
node_user_controller -->|"reads and updates"| node_user_model
node_auth -->|"loads user"| node_user_model
node_user_controller -->|"uploads images"| node_cloudinary_helper
node_cloudinary_helper -->|"uploads files"| node_cloudinary
node_cloudinary_helper -->|"removes local files"| node_temp_files
node_multer -->|"stores uploads"| node_temp_files
node_user_controller -->|"wraps handlers"| node_async_handler
node_user_controller -->|"formats results"| node_api_response
node_user_controller -->|"raises errors"| node_api_error
node_auth -->|"wraps middleware"| node_async_handler

click node_server "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/app.js"
click node_user_routes "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/routes/user.routes.js"
click node_startup "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/index.js"
click node_db_connect "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/db/index.js"
click node_user_controller "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/controllers/user.controller.js"
click node_auth "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/middlewares/auth.middleware.js"
click node_user_model "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/models/user.model.js"
click node_domain_models "https://github.com/jaspreet29kalra/youtube/tree/main/FB-Project/src/models"
click node_multer "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/middlewares/multer.middleware.js"
click node_cloudinary_helper "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/cloudinary.js"
click node_async_handler "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/asyncHandler.js"
click node_api_response "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/ApiResponse.js"
click node_api_error "https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/ApiError.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_routes,node_startup,node_async_handler,node_api_response,node_api_error,node_client toneBlue
class node_user_controller,node_auth toneAmber
class node_multer,node_temp_files,node_cloudinary_helper,node_cloudinary toneMint
class node_db_connect,node_mongo,node_user_model,node_domain_models toneRose
```

## Components

### API and startup

- [Express app](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/app.js): `FB-Project/src/app.js`
- [User routes](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/routes/user.routes.js): `FB-Project/src/routes/user.routes.js`
- [Server startup](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/index.js): `FB-Project/src/index.js`
- [Async wrapper](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/asyncHandler.js): `FB-Project/src/utils/asyncHandler.js`
- [API response](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/ApiResponse.js): `FB-Project/src/utils/ApiResponse.js`
- [API errors](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/ApiError.js): `FB-Project/src/utils/ApiError.js`

### Account workflows

- [Account controller](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/controllers/user.controller.js): `FB-Project/src/controllers/user.controller.js`
- [JWT authentication](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/middlewares/auth.middleware.js): `FB-Project/src/middlewares/auth.middleware.js`

### Media handling

- [File intake](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/middlewares/multer.middleware.js): `FB-Project/src/middlewares/multer.middleware.js`
- **Temporary files**
- [Cloudinary uploader](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/utils/cloudinary.js): `FB-Project/src/utils/cloudinary.js`
- **Cloudinary**

### Persistence and domain

- [DB connection](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/db/index.js): `FB-Project/src/db/index.js`
- **MongoDB**
- [User records](https://github.com/jaspreet29kalra/youtube/blob/main/FB-Project/src/models/user.model.js): `FB-Project/src/models/user.model.js`
- [Content records](https://github.com/jaspreet29kalra/youtube/tree/main/FB-Project/src/models): `FB-Project/src/models`

### Other components

- **API client**

## Connections

- API client → Express app: sends requests (evidence: `FB-Project/src/app.js`)
- Express app → User routes: mounts routes (evidence: `FB-Project/src/app.js`)
- Server startup → DB connection: connects first (evidence: `FB-Project/src/index.js`)
- Server startup → Express app: starts listener (evidence: `FB-Project/src/index.js`)
- DB connection → MongoDB: connects to (evidence: `FB-Project/src/db/index.js`)
- User routes → Account controller: dispatches requests (evidence: `FB-Project/src/routes/user.routes.js`)
- User routes → JWT authentication: protects routes (evidence: `FB-Project/src/routes/user.routes.js`)
- User routes → File intake: parses uploads (evidence: `FB-Project/src/routes/user.routes.js`)
- Account controller → User records: reads and updates (evidence: `FB-Project/src/controllers/user.controller.js`)
- JWT authentication → User records: loads user (evidence: `FB-Project/src/middlewares/auth.middleware.js`)
- Account controller → Cloudinary uploader: uploads images (evidence: `FB-Project/src/controllers/user.controller.js`)
- Cloudinary uploader → Cloudinary: uploads files (evidence: `FB-Project/src/utils/cloudinary.js`)
- Cloudinary uploader → Temporary files: removes local files (evidence: `FB-Project/src/utils/cloudinary.js`)
- File intake → Temporary files: stores uploads (evidence: `FB-Project/src/middlewares/multer.middleware.js`)
- Account controller → Async wrapper: wraps handlers (evidence: `FB-Project/src/controllers/user.controller.js`)
- Account controller → API response: formats results (evidence: `FB-Project/src/controllers/user.controller.js`)
- Account controller → API errors: raises errors (evidence: `FB-Project/src/controllers/user.controller.js`)
- JWT authentication → Async wrapper: wraps middleware (evidence: `FB-Project/src/middlewares/auth.middleware.js`)
