# aadityaraj25/mediaapi architecture

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

- Interactive diagram: https://gitdiagram.com/aadityaraj25/mediaapi
- Repository: https://github.com/aadityaraj25/mediaapi

## Overview

repoB is an Express user-account backend: clients register or authenticate, then use protected account, profile, image, and history endpoints. The principal path runs from mounted user routes through JWT/upload middleware into controller operations, with Mongoose-backed user data and optional Cloudinary image storage. README-described capabilities are included, though some controller internals and model implementations were not sampled; those links are limited to documented behavior or visible calls.

Main entry points: [`src/controllers/user.controllers.js`](https://github.com/aadityaraj25/mediaapi/blob/main/src/controllers/user.controllers.js) (User controllers), [`src/routes/user.routes.js`](https://github.com/aadityaraj25/mediaapi/blob/main/src/routes/user.routes.js) (User routes), [`src/app.js`](https://github.com/aadityaraj25/mediaapi/blob/main/src/app.js) (Express app), [`src/models/user.models.js`](https://github.com/aadityaraj25/mediaapi/blob/main/src/models/user.models.js) (User model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["HTTP entry"]
  node_server["Server startup<br/>[index.js]"]
  node_app["Express app<br/>[app.js]"]
  node_routes["User routes<br/>[user.routes.js]"]
  node_auth["JWT guard<br/>[auth.middleware.js]"]
  node_uploads["Upload middleware"]
end

subgraph group_identity["Account workflows"]
  node_controllers["User controllers"]
end

subgraph group_storage["Persistence"]
  node_user[("User model<br/>[user.models.js]")]
  node_subscriptions[("Subscription model")]
  node_videos[("Video model<br/>[video.models.js]")]
  node_mongo[("MongoDB")]
  node_dbconnect["DB connector<br/>[db.js]"]
end

subgraph group_integrations["External services"]
  node_cloudinary["Cloudinary uploader<br/>[cloudinary.js]"]
  node_cloudservice[("Cloudinary")]
  node_tempfiles[("Temporary uploads")]
end

subgraph group_shared["Shared infrastructure"]
  node_responses["API responses<br/>[apiResponse.js]"]
  node_errors["API errors<br/>[apiErrors.js]"]
  node_async["Async wrapper<br/>[asyncHandler.js]"]
end

node_client(("API client"))

node_client -->|"sends requests"| node_app
node_server -->|"connects at startup"| node_dbconnect
node_dbconnect -->|"opens connection"| node_mongo
node_server -->|"starts listener"| node_app
node_app -->|"mounts routes"| node_routes
node_routes -->|"dispatches handlers"| node_controllers
node_routes -->|"guards protected routes"| node_auth
node_routes -->|"parses image uploads"| node_uploads
node_auth -->|"loads account"| node_user
node_controllers -->|"queries and updates"| node_user
node_controllers -->|"uploads images"| node_cloudinary
node_uploads -->|"writes temporary files"| node_tempfiles
node_cloudinary -->|"sends image files"| node_cloudservice
node_controllers -->|"formats results"| node_responses
node_controllers -->|"raises failures"| node_errors
node_controllers -->|"wraps handlers"| node_async
node_user -->|"persists user records"| node_mongo
node_subscriptions -->|"stores subscriptions"| node_mongo
node_videos -->|"stores videos"| node_mongo

click node_server "https://github.com/aadityaraj25/mediaapi/blob/main/src/index.js"
click node_app "https://github.com/aadityaraj25/mediaapi/blob/main/src/app.js"
click node_routes "https://github.com/aadityaraj25/mediaapi/blob/main/src/routes/user.routes.js"
click node_auth "https://github.com/aadityaraj25/mediaapi/blob/main/src/middlewares/auth.middleware.js"
click node_uploads "https://github.com/aadityaraj25/mediaapi/blob/main/src/middlewares/multer.middleware.js"
click node_controllers "https://github.com/aadityaraj25/mediaapi/blob/main/src/controllers/user.controllers.js"
click node_user "https://github.com/aadityaraj25/mediaapi/blob/main/src/models/user.models.js"
click node_subscriptions "https://github.com/aadityaraj25/mediaapi/blob/main/src/models/subscription.models.js"
click node_videos "https://github.com/aadityaraj25/mediaapi/blob/main/src/models/video.models.js"
click node_dbconnect "https://github.com/aadityaraj25/mediaapi/blob/main/src/config/db.js"
click node_cloudinary "https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/cloudinary.js"
click node_responses "https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/apiResponse.js"
click node_errors "https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/apiErrors.js"
click node_async "https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/asyncHandler.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_app,node_routes,node_auth,node_uploads,node_client toneBlue
class node_controllers toneAmber
class node_user,node_subscriptions,node_videos,node_mongo,node_dbconnect toneMint
class node_cloudinary,node_cloudservice,node_tempfiles toneRose
class node_responses,node_errors,node_async toneIndigo
```

## Components

### HTTP entry

- [Server startup](https://github.com/aadityaraj25/mediaapi/blob/main/src/index.js): `src/index.js`
- [Express app](https://github.com/aadityaraj25/mediaapi/blob/main/src/app.js): `src/app.js`
- [User routes](https://github.com/aadityaraj25/mediaapi/blob/main/src/routes/user.routes.js): `src/routes/user.routes.js`
- [JWT guard](https://github.com/aadityaraj25/mediaapi/blob/main/src/middlewares/auth.middleware.js): `src/middlewares/auth.middleware.js`
- [Upload middleware](https://github.com/aadityaraj25/mediaapi/blob/main/src/middlewares/multer.middleware.js): `src/middlewares/multer.middleware.js`

### Account workflows

- [User controllers](https://github.com/aadityaraj25/mediaapi/blob/main/src/controllers/user.controllers.js): `src/controllers/user.controllers.js`

### Persistence

- [User model](https://github.com/aadityaraj25/mediaapi/blob/main/src/models/user.models.js): `src/models/user.models.js`
- [Subscription model](https://github.com/aadityaraj25/mediaapi/blob/main/src/models/subscription.models.js): `src/models/subscription.models.js`
- [Video model](https://github.com/aadityaraj25/mediaapi/blob/main/src/models/video.models.js): `src/models/video.models.js`
- **MongoDB**
- [DB connector](https://github.com/aadityaraj25/mediaapi/blob/main/src/config/db.js): `src/config/db.js`

### External services

- [Cloudinary uploader](https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/cloudinary.js): `src/utils/cloudinary.js`
- **Cloudinary**
- **Temporary uploads**

### Shared infrastructure

- [API responses](https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/apiResponse.js): `src/utils/apiResponse.js`
- [API errors](https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/apiErrors.js): `src/utils/apiErrors.js`
- [Async wrapper](https://github.com/aadityaraj25/mediaapi/blob/main/src/utils/asyncHandler.js): `src/utils/asyncHandler.js`

### Other components

- **API client**

## Connections

- API client → Express app: sends requests
- Server startup → DB connector: connects at startup
- DB connector → MongoDB: opens connection
- Server startup → Express app: starts listener
- Express app → User routes: mounts routes
- User routes → User controllers: dispatches handlers
- User routes → JWT guard: guards protected routes
- User routes → Upload middleware: parses image uploads
- JWT guard → User model: loads account
- User controllers → User model: queries and updates
- User controllers → Cloudinary uploader: uploads images
- Upload middleware → Temporary uploads: writes temporary files
- Cloudinary uploader → Cloudinary: sends image files
- User controllers → API responses: formats results
- User controllers → API errors: raises failures
- User controllers → Async wrapper: wraps handlers
- User model → MongoDB: persists user records
- Subscription model → MongoDB: stores subscriptions
- Video model → MongoDB: stores videos
