# jstmejosh/skillswap-backend architecture

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

## Overview

SkillSwap is a backend API for exchanging skills through user-posted offers and requests. Clients enter through the Express API; authentication protects account and swap actions, while public browsing and profiles expose limited information. The main exchange flow is to browse swaps, submit a request, and have the owner or requester update its status; accepting a request reveals contact details. Separate account flows cover registration, login, and password recovery, with email delivery for welcome and reset messages. The README describes CRUD marketplace capabilities; sampled controllers also show profiles and request handling. Wiring for unsampled modules is limited to paths and mounts supported by the tree.

Main entry points: [`server.js`](https://github.com/jstmejosh/skillswap-backend/blob/main/server.js) (Express API), [`controllers/requestControllers.js`](https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/requestControllers.js) (Request lifecycle), [`middleware/authMiddleware.js`](https://github.com/jstmejosh/skillswap-backend/blob/main/middleware/authMiddleware.js) (JWT protection), [`routes/swapRoutes.js`](https://github.com/jstmejosh/skillswap-backend/blob/main/routes/swapRoutes.js) (Swap routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry"]
  node_app["Express API<br/>[server.js]"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_swap_routes["Swap routes<br/>[swapRoutes.js]"]
  node_request_routes["Request routes<br/>[requestRoutes.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_auth_middleware["JWT protection<br/>[authMiddleware.js]"]
end

subgraph group_exchange["Skill exchange"]
  node_swap_controller["Swap management<br/>[swapControllers.js]"]
  node_request_controller["Request lifecycle"]
end

subgraph group_accounts["Accounts"]
  node_user_controller["Profile management<br/>[userControllers.js]"]
  node_auth_controller["Account access<br/>[authControllers.js]"]
  node_mail_helper["Mail delivery helper<br/>[sendMail.js]"]
end

subgraph group_persistence["Persistence"]
  node_user_model["User model<br/>[User.js]"]
  node_swap_model["Swap model<br/>[Swap.js]"]
  node_request_model["Swap request model<br/>[SwapRequest.js]"]
  node_mongo[("MongoDB")]
end

node_client(("API client"))
node_mail_service["Email service"]

node_client -->|"sends API requests"| node_app
node_app -->|"mounts auth routes"| node_auth_routes
node_app -->|"mounts swap routes"| node_swap_routes
node_app -->|"mounts request routes"| node_request_routes
node_app -->|"mounts user routes"| node_user_routes
node_app -->|"connects to"| node_mongo
node_auth_routes -->|"dispatches auth"| node_auth_controller
node_swap_routes -->|"dispatches swap actions"| node_swap_controller
node_swap_routes -->|"dispatches request creation"| node_request_controller
node_request_routes -->|"dispatches request actions"| node_request_controller
node_user_routes -->|"dispatches profile actions"| node_user_controller
node_swap_routes -->|"protects private routes"| node_auth_middleware
node_request_routes -->|"protects routes"| node_auth_middleware
node_user_routes -->|"protects updates"| node_auth_middleware
node_auth_middleware -->|"loads token user"| node_user_model
node_auth_controller -->|"reads and updates accounts"| node_user_model
node_auth_controller -->|"sends account email"| node_mail_helper
node_mail_helper -.->|"delivers email"| node_mail_service
node_user_controller -->|"reads and updates profiles"| node_user_model
node_user_controller -->|"loads profile swaps"| node_swap_model
node_swap_controller -->|"manages swap records"| node_swap_model
node_request_controller -->|"checks target swap"| node_swap_model
node_request_controller -->|"creates and updates requests"| node_request_model
node_auth_controller -->|"persists account changes"| node_mongo
node_user_controller -->|"persists profile changes"| node_mongo
node_swap_controller -->|"persists swap changes"| node_mongo
node_request_controller -->|"persists request changes"| node_mongo
node_auth_middleware -->|"loads account"| node_mongo

click node_app "https://github.com/jstmejosh/skillswap-backend/blob/main/server.js"
click node_auth_routes "https://github.com/jstmejosh/skillswap-backend/blob/main/routes/authRoutes.js"
click node_swap_routes "https://github.com/jstmejosh/skillswap-backend/blob/main/routes/swapRoutes.js"
click node_request_routes "https://github.com/jstmejosh/skillswap-backend/blob/main/routes/requestRoutes.js"
click node_user_routes "https://github.com/jstmejosh/skillswap-backend/blob/main/routes/userRoutes.js"
click node_auth_middleware "https://github.com/jstmejosh/skillswap-backend/blob/main/middleware/authMiddleware.js"
click node_swap_controller "https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/swapControllers.js"
click node_request_controller "https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/requestControllers.js"
click node_user_controller "https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/userControllers.js"
click node_auth_controller "https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/authControllers.js"
click node_mail_helper "https://github.com/jstmejosh/skillswap-backend/blob/main/utils/sendMail.js"
click node_user_model "https://github.com/jstmejosh/skillswap-backend/blob/main/models/User.js"
click node_swap_model "https://github.com/jstmejosh/skillswap-backend/blob/main/models/Swap.js"
click node_request_model "https://github.com/jstmejosh/skillswap-backend/blob/main/models/SwapRequest.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_auth_routes,node_swap_routes,node_request_routes,node_user_routes,node_auth_middleware,node_client toneBlue
class node_swap_controller,node_request_controller toneAmber
class node_user_controller,node_auth_controller,node_mail_helper toneMint
class node_user_model,node_swap_model,node_request_model,node_mongo toneRose
class node_mail_service toneIndigo
```

## Components

### API entry

- [Express API](https://github.com/jstmejosh/skillswap-backend/blob/main/server.js): `server.js`
- [Auth routes](https://github.com/jstmejosh/skillswap-backend/blob/main/routes/authRoutes.js): `routes/authRoutes.js`
- [Swap routes](https://github.com/jstmejosh/skillswap-backend/blob/main/routes/swapRoutes.js): `routes/swapRoutes.js`
- [Request routes](https://github.com/jstmejosh/skillswap-backend/blob/main/routes/requestRoutes.js): `routes/requestRoutes.js`
- [User routes](https://github.com/jstmejosh/skillswap-backend/blob/main/routes/userRoutes.js): `routes/userRoutes.js`
- [JWT protection](https://github.com/jstmejosh/skillswap-backend/blob/main/middleware/authMiddleware.js): `middleware/authMiddleware.js`

### Skill exchange

- [Swap management](https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/swapControllers.js): `controllers/swapControllers.js`
- [Request lifecycle](https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/requestControllers.js): `controllers/requestControllers.js`

### Accounts

- [Profile management](https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/userControllers.js): `controllers/userControllers.js`
- [Account access](https://github.com/jstmejosh/skillswap-backend/blob/main/controllers/authControllers.js): `controllers/authControllers.js`
- [Mail delivery helper](https://github.com/jstmejosh/skillswap-backend/blob/main/utils/sendMail.js): `utils/sendMail.js`

### Persistence

- [User model](https://github.com/jstmejosh/skillswap-backend/blob/main/models/User.js): `models/User.js`
- [Swap model](https://github.com/jstmejosh/skillswap-backend/blob/main/models/Swap.js): `models/Swap.js`
- [Swap request model](https://github.com/jstmejosh/skillswap-backend/blob/main/models/SwapRequest.js): `models/SwapRequest.js`
- **MongoDB**

### Other components

- **API client**
- **Email service**

## Connections

- API client → Express API: sends API requests
- Express API → Auth routes: mounts auth routes
- Express API → Swap routes: mounts swap routes
- Express API → Request routes: mounts request routes
- Express API → User routes: mounts user routes
- Express API → MongoDB: connects to
- Auth routes → Account access: dispatches auth
- Swap routes → Swap management: dispatches swap actions
- Swap routes → Request lifecycle: dispatches request creation
- Request routes → Request lifecycle: dispatches request actions
- User routes → Profile management: dispatches profile actions
- Swap routes → JWT protection: protects private routes
- Request routes → JWT protection: protects routes
- User routes → JWT protection: protects updates
- JWT protection → User model: loads token user
- Account access → User model: reads and updates accounts
- Account access → Mail delivery helper: sends account email
- Mail delivery helper → Email service: delivers email
- Profile management → User model: reads and updates profiles
- Profile management → Swap model: loads profile swaps
- Swap management → Swap model: manages swap records
- Request lifecycle → Swap model: checks target swap
- Request lifecycle → Swap request model: creates and updates requests
- Account access → MongoDB: persists account changes
- Profile management → MongoDB: persists profile changes
- Swap management → MongoDB: persists swap changes
- Request lifecycle → MongoDB: persists request changes
- JWT protection → MongoDB: loads account
