# masonrose115/trading-website architecture

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

## Overview

This is an Express/EJS trading application for listing parts, managing user accounts, watching trades, and exchanging offers. Users browse listings or register and log in; authenticated users can create and manage their own trades, maintain a watchlist, and send, accept, decline, or cancel offers. Routes dispatch to controllers, which read and update Mongoose models and render pages. The excerpts show trade and account workflows; offer behavior is partly sampled, so the graph limits its detail to relationships evidenced by the controller and route files.

Main entry points: [`controllers/userController.js`](https://github.com/masonrose115/trading-website/blob/main/controllers/userController.js) (Account and offers), [`app.js`](https://github.com/masonrose115/trading-website/blob/main/app.js) (Express app), [`controllers/tradeController.js`](https://github.com/masonrose115/trading-website/blob/main/controllers/tradeController.js) (Trade workflow), [`routes/TradeRotute.js`](https://github.com/masonrose115/trading-website/blob/main/routes/TradeRotute.js) (Trade routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry and routing"]
  node_app["Express app<br/>[app.js]"]
  node_mainroutes["Main routes<br/>[mainRoute.js]"]
  node_traderoutes["Trade routes<br/>[TradeRotute.js]"]
  node_userroutes["User routes<br/>[userRoute.js]"]
  node_auth["Login checks<br/>[auth.js]"]
  node_validator["Input validation<br/>[validator.js]"]
  node_maincontroller["Site pages<br/>[mainController.js]"]
  node_mainviews["Info pages"]
end

subgraph group_trade["Trade listings"]
  node_tradecontroller["Trade workflow<br/>[tradeController.js]"]
  node_tradeviews["Trade pages"]
end

subgraph group_accounts["Accounts and offers"]
  node_usercontroller["Account and offers<br/>[userController.js]"]
  node_userviews["Account pages"]
end

subgraph group_data["Persistent models"]
  node_trade[("Trade records<br/>[trade.js]")]
  node_user[("User records<br/>[user.js]")]
  node_watchlist[("Watchlist records<br/>[watchlist.js]")]
  node_offer[("Offer records<br/>[offer.js]")]
end

node_visitor(("Visitor"))
node_mongo[("MongoDB")]

node_visitor -->|"requests pages"| node_app
node_app -->|"mounts routes"| node_mainroutes
node_app -->|"mounts routes"| node_traderoutes
node_app -->|"mounts routes"| node_userroutes
node_mainroutes -->|"dispatches to"| node_maincontroller
node_maincontroller -->|"renders pages"| node_mainviews
node_traderoutes -->|"dispatches to"| node_tradecontroller
node_traderoutes -->|"checks login"| node_auth
node_traderoutes -->|"validates requests"| node_validator
node_tradecontroller -->|"reads and writes"| node_trade
node_tradecontroller -->|"looks up seller"| node_user
node_tradecontroller -->|"manages watches"| node_watchlist
node_tradecontroller -->|"renders pages"| node_tradeviews
node_auth -->|"checks ownership"| node_trade
node_userroutes -->|"dispatches to"| node_usercontroller
node_userroutes -->|"checks login"| node_auth
node_usercontroller -->|"manages accounts"| node_user
node_usercontroller -->|"reads and updates"| node_trade
node_usercontroller -->|"loads watchlist"| node_watchlist
node_usercontroller -->|"manages offers"| node_offer
node_usercontroller -->|"renders pages"| node_userviews
node_app -->|"connects and stores sessions"| node_mongo

click node_app "https://github.com/masonrose115/trading-website/blob/main/app.js"
click node_mainroutes "https://github.com/masonrose115/trading-website/blob/main/routes/mainRoute.js"
click node_traderoutes "https://github.com/masonrose115/trading-website/blob/main/routes/TradeRotute.js"
click node_userroutes "https://github.com/masonrose115/trading-website/blob/main/routes/userRoute.js"
click node_auth "https://github.com/masonrose115/trading-website/blob/main/middleware/auth.js"
click node_validator "https://github.com/masonrose115/trading-website/blob/main/middleware/validator.js"
click node_maincontroller "https://github.com/masonrose115/trading-website/blob/main/controllers/mainController.js"
click node_mainviews "https://github.com/masonrose115/trading-website/tree/main/views/trades"
click node_tradecontroller "https://github.com/masonrose115/trading-website/blob/main/controllers/tradeController.js"
click node_tradeviews "https://github.com/masonrose115/trading-website/tree/main/views/trades"
click node_usercontroller "https://github.com/masonrose115/trading-website/blob/main/controllers/userController.js"
click node_userviews "https://github.com/masonrose115/trading-website/tree/main/views/users"
click node_trade "https://github.com/masonrose115/trading-website/blob/main/models/trade.js"
click node_user "https://github.com/masonrose115/trading-website/blob/main/models/user.js"
click node_watchlist "https://github.com/masonrose115/trading-website/blob/main/models/watchlist.js"
click node_offer "https://github.com/masonrose115/trading-website/blob/main/models/offer.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_mainroutes,node_traderoutes,node_userroutes,node_auth,node_validator,node_maincontroller,node_mainviews toneBlue
class node_tradecontroller,node_tradeviews,node_mongo toneAmber
class node_usercontroller,node_userviews toneMint
class node_trade,node_user,node_watchlist,node_offer toneRose
class node_visitor toneIndigo
```

## Components

### Web entry and routing

- [Express app](https://github.com/masonrose115/trading-website/blob/main/app.js): `app.js`
- [Main routes](https://github.com/masonrose115/trading-website/blob/main/routes/mainRoute.js): `routes/mainRoute.js`
- [Trade routes](https://github.com/masonrose115/trading-website/blob/main/routes/TradeRotute.js): `routes/TradeRotute.js`
- [User routes](https://github.com/masonrose115/trading-website/blob/main/routes/userRoute.js): `routes/userRoute.js`
- [Login checks](https://github.com/masonrose115/trading-website/blob/main/middleware/auth.js): `middleware/auth.js`
- [Input validation](https://github.com/masonrose115/trading-website/blob/main/middleware/validator.js): `middleware/validator.js`
- [Site pages](https://github.com/masonrose115/trading-website/blob/main/controllers/mainController.js): `controllers/mainController.js`
- [Info pages](https://github.com/masonrose115/trading-website/tree/main/views/trades): `views/trades`

### Trade listings

- [Trade workflow](https://github.com/masonrose115/trading-website/blob/main/controllers/tradeController.js): `controllers/tradeController.js`
- [Trade pages](https://github.com/masonrose115/trading-website/tree/main/views/trades): `views/trades`

### Accounts and offers

- [Account and offers](https://github.com/masonrose115/trading-website/blob/main/controllers/userController.js): `controllers/userController.js`
- [Account pages](https://github.com/masonrose115/trading-website/tree/main/views/users): `views/users`

### Persistent models

- [Trade records](https://github.com/masonrose115/trading-website/blob/main/models/trade.js): `models/trade.js`
- [User records](https://github.com/masonrose115/trading-website/blob/main/models/user.js): `models/user.js`
- [Watchlist records](https://github.com/masonrose115/trading-website/blob/main/models/watchlist.js): `models/watchlist.js`
- [Offer records](https://github.com/masonrose115/trading-website/blob/main/models/offer.js): `models/offer.js`

### Other components

- **Visitor**
- **MongoDB**

## Connections

- Visitor → Express app: requests pages
- Express app → Main routes: mounts routes (evidence: `app.js`)
- Express app → Trade routes: mounts routes (evidence: `app.js`)
- Express app → User routes: mounts routes (evidence: `app.js`)
- Main routes → Site pages: dispatches to (evidence: `routes/mainRoute.js`)
- Site pages → Info pages: renders pages (evidence: `controllers/mainController.js`)
- Trade routes → Trade workflow: dispatches to (evidence: `routes/TradeRotute.js`)
- Trade routes → Login checks: checks login (evidence: `routes/TradeRotute.js`)
- Trade routes → Input validation: validates requests (evidence: `routes/TradeRotute.js`)
- Trade workflow → Trade records: reads and writes (evidence: `controllers/tradeController.js`)
- Trade workflow → User records: looks up seller (evidence: `controllers/tradeController.js`)
- Trade workflow → Watchlist records: manages watches (evidence: `controllers/tradeController.js`)
- Trade workflow → Trade pages: renders pages (evidence: `controllers/tradeController.js`)
- Login checks → Trade records: checks ownership (evidence: `middleware/auth.js`)
- User routes → Account and offers: dispatches to (evidence: `routes/userRoute.js`)
- User routes → Login checks: checks login (evidence: `routes/userRoute.js`)
- Account and offers → User records: manages accounts (evidence: `controllers/userController.js`)
- Account and offers → Trade records: reads and updates (evidence: `controllers/userController.js`)
- Account and offers → Watchlist records: loads watchlist (evidence: `controllers/userController.js`)
- Account and offers → Offer records: manages offers (evidence: `controllers/userController.js`)
- Account and offers → Account pages: renders pages (evidence: `controllers/userController.js`)
- Express app → MongoDB: connects and stores sessions (evidence: `app.js`)
