# chrisblakely01/docker-nodejs-demo architecture

> Architecture diagram of the GitHub repository chrisblakely01/docker-nodejs-demo, 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/chrisblakely01/docker-nodejs-demo
- Repository: https://github.com/chrisblakely01/docker-nodejs-demo

## Overview

This is a Docker-oriented Node.js demo whose runtime product is a book catalog plus a loan service that enriches loan records with book details. The main workflow is: a client requests loans, the loan service fetches books from the book service, and returns matched loan/book details. The catalog reads MongoDB and seeds initial records when the database is empty. The README documents Nginx, container networking, and database-in-container capabilities; their exact configuration wiring is not established by the sampled source.

Main entry points: [`book-service/src/index.js`](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/index.js) (Book service), [`loan-service/src/index.js`](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/loan-service/src/index.js) (Loan service), [`nginx.conf`](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/nginx.conf) (Nginx), [`book-service/src/models/bookModel.js`](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/models/bookModel.js) (Book model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Book catalog"]
  node_book_service["Book service<br/>[index.js]"]
  node_book_model["Book model<br/>[bookModel.js]"]
  node_db_start["Database startup<br/>[db.js]"]
end

subgraph group_loans["Loan enrichment"]
  node_loan_service["Loan service<br/>[index.js]"]
  node_loan_records["Loan records<br/>[index.js]"]
end

subgraph group_network["Container networking"]
  node_nginx["Nginx<br/>[nginx.conf]"]
end

node_client(("Client"))
node_mongo[("MongoDB")]

node_client -->|"sends requests"| node_nginx
node_nginx -->|"routes requests"| node_book_service
node_nginx -->|"routes requests"| node_loan_service
node_client -->|"requests books"| node_book_service
node_book_service -->|"queries books"| node_book_model
node_book_model -->|"reads records"| node_mongo
node_book_service -->|"starts database"| node_db_start
node_db_start -->|"connects and seeds"| node_mongo
node_loan_service -->|"matches loans"| node_loan_records
node_loan_service -->|"fetches books"| node_book_service
node_loan_service -->|"returns loan details"| node_client
node_book_service -->|"returns books"| node_client

click node_nginx "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/nginx.conf"
click node_book_service "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/index.js"
click node_book_model "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/models/bookModel.js"
click node_db_start "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/db/db.js"
click node_loan_service "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/loan-service/src/index.js"
click node_loan_records "https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/loan-service/src/index.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_book_service,node_book_model,node_db_start,node_client toneBlue
class node_loan_service,node_loan_records,node_mongo toneAmber
class node_nginx toneMint
```

## Components

### Book catalog

- [Book service](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/index.js): `book-service/src/index.js`
- [Book model](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/models/bookModel.js): `book-service/src/models/bookModel.js`
- [Database startup](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/book-service/src/db/db.js): `book-service/src/db/db.js`

### Loan enrichment

- [Loan service](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/loan-service/src/index.js): `loan-service/src/index.js`
- [Loan records](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/loan-service/src/index.js): `loan-service/src/index.js`

### Container networking

- [Nginx](https://github.com/chrisblakely01/docker-nodejs-demo/blob/main/nginx.conf): `nginx.conf`

### Other components

- **Client**
- **MongoDB**

## Connections

- Client → Nginx: sends requests
- Nginx → Book service: routes requests
- Nginx → Loan service: routes requests
- Client → Book service: requests books
- Book service → Book model: queries books
- Book model → MongoDB: reads records
- Book service → Database startup: starts database
- Database startup → MongoDB: connects and seeds
- Loan service → Loan records: matches loans
- Loan service → Book service: fetches books
- Loan service → Client: returns loan details
- Book service → Client: returns books
