# kenjimattos/express-mongo-api architecture

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

- Interactive diagram: https://gitdiagram.com/kenjimattos/express-mongo-api
- Repository: https://github.com/kenjimattos/express-mongo-api

## Overview

This is a Node.js/Express bookstore REST API. An API client sends JSON requests to the server; the app connects to MongoDB and registers author, book, and user routes, which dispatch to controllers. Controllers perform CRUD operations through Mongoose models and return JSON responses. The book workflow also looks up an author when creating a book, and books can be searched by publisher. User passwords are hashed with bcrypt on save. The README documents these capabilities; connections are shown at the module level, since route and model implementations were not all sampled.

Main entry points: [`src/routes/index.js`](https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/index.js) (Route registry), [`src/controllers/bookController.js`](https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/bookController.js) (Book operations), [`src/app.js`](https://github.com/kenjimattos/express-mongo-api/blob/main/src/app.js) (App setup), [`src/controllers/authorController.js`](https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/authorController.js) (Author CRUD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["API runtime"]
  node_server["HTTP server<br/>[server.js]"]
  node_app["App setup<br/>[app.js]"]
  node_route_index["Route registry<br/>[index.js]"]
end

subgraph group_catalog["Book catalog"]
  node_author_routes["Author routes<br/>[authorRoute.js]"]
  node_book_routes["Book routes<br/>[bookRoute.js]"]
  node_author_controller["Author CRUD"]
  node_book_controller["Book operations<br/>[bookController.js]"]
end

subgraph group_identity["Users"]
  node_user_routes["User routes<br/>[userRoute.js]"]
  node_user_controller["User CRUD<br/>[userController.js]"]
end

subgraph group_persistence["Persistence"]
  node_author_model["Author model<br/>[authorModel.js]"]
  node_book_model["Book model<br/>[bookModel.js]"]
  node_user_model["User model<br/>[userModel.js]"]
  node_db_connect["DB connector<br/>[dbConnect.js]"]
end

node_client(("API client"))
node_mongo[("MongoDB")]
node_bcrypt["bcrypt"]

node_client -->|"sends requests"| node_server
node_server -->|"loads app"| node_app
node_app -->|"connects database"| node_db_connect
node_db_connect -->|"connects"| node_mongo
node_app -->|"registers routes"| node_route_index
node_route_index -->|"mounts"| node_author_routes
node_route_index -->|"mounts"| node_book_routes
node_route_index -->|"mounts"| node_user_routes
node_author_routes -->|"dispatches"| node_author_controller
node_book_routes -->|"dispatches"| node_book_controller
node_user_routes -->|"dispatches"| node_user_controller
node_author_controller -->|"reads and writes"| node_author_model
node_book_controller -->|"reads and writes"| node_book_model
node_book_controller -->|"looks up author"| node_author_model
node_user_controller -->|"reads and writes"| node_user_model
node_author_model -->|"persists data"| node_mongo
node_book_model -->|"persists data"| node_mongo
node_user_model -->|"persists data"| node_mongo
node_user_model -->|"hashes passwords"| node_bcrypt
node_author_controller -->|"returns JSON"| node_client
node_book_controller -->|"returns JSON"| node_client
node_user_controller -->|"returns JSON"| node_client

click node_server "https://github.com/kenjimattos/express-mongo-api/blob/main/server.js"
click node_app "https://github.com/kenjimattos/express-mongo-api/blob/main/src/app.js"
click node_route_index "https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/index.js"
click node_author_routes "https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/authorRoute.js"
click node_book_routes "https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/bookRoute.js"
click node_user_routes "https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/userRoute.js"
click node_author_controller "https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/authorController.js"
click node_book_controller "https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/bookController.js"
click node_user_controller "https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/userController.js"
click node_author_model "https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/authorModel.js"
click node_book_model "https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/bookModel.js"
click node_user_model "https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/userModel.js"
click node_db_connect "https://github.com/kenjimattos/express-mongo-api/blob/main/src/config/dbConnect.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_route_index,node_client toneBlue
class node_author_routes,node_book_routes,node_author_controller,node_book_controller,node_mongo toneAmber
class node_user_routes,node_user_controller toneMint
class node_author_model,node_book_model,node_user_model,node_db_connect toneRose
class node_bcrypt toneIndigo
```

## Components

### API runtime

- [HTTP server](https://github.com/kenjimattos/express-mongo-api/blob/main/server.js): `server.js`
- [App setup](https://github.com/kenjimattos/express-mongo-api/blob/main/src/app.js): `src/app.js`
- [Route registry](https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/index.js): `src/routes/index.js`

### Book catalog

- [Author routes](https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/authorRoute.js): `src/routes/authorRoute.js`
- [Book routes](https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/bookRoute.js): `src/routes/bookRoute.js`
- [Author CRUD](https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/authorController.js): `src/controllers/authorController.js`
- [Book operations](https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/bookController.js): `src/controllers/bookController.js`

### Users

- [User routes](https://github.com/kenjimattos/express-mongo-api/blob/main/src/routes/userRoute.js): `src/routes/userRoute.js`
- [User CRUD](https://github.com/kenjimattos/express-mongo-api/blob/main/src/controllers/userController.js): `src/controllers/userController.js`

### Persistence

- [Author model](https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/authorModel.js): `src/models/authorModel.js`
- [Book model](https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/bookModel.js): `src/models/bookModel.js`
- [User model](https://github.com/kenjimattos/express-mongo-api/blob/main/src/models/userModel.js): `src/models/userModel.js`
- [DB connector](https://github.com/kenjimattos/express-mongo-api/blob/main/src/config/dbConnect.js): `src/config/dbConnect.js`

### Other components

- **API client**
- **MongoDB**
- **bcrypt**

## Connections

- API client → HTTP server: sends requests
- HTTP server → App setup: loads app
- App setup → DB connector: connects database
- DB connector → MongoDB: connects
- App setup → Route registry: registers routes
- Route registry → Author routes: mounts
- Route registry → Book routes: mounts
- Route registry → User routes: mounts
- Author routes → Author CRUD: dispatches
- Book routes → Book operations: dispatches
- User routes → User CRUD: dispatches
- Author CRUD → Author model: reads and writes
- Book operations → Book model: reads and writes
- Book operations → Author model: looks up author
- User CRUD → User model: reads and writes
- Author model → MongoDB: persists data
- Book model → MongoDB: persists data
- User model → MongoDB: persists data
- User model → bcrypt: hashes passwords
- Author CRUD → API client: returns JSON
- Book operations → API client: returns JSON
- User CRUD → API client: returns JSON
