# packtpublishing/mastering-node.js-web-development architecture

> Architecture diagram of the GitHub repository packtpublishing/mastering-node.js-web-development, 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/packtpublishing/mastering-node.js-web-development
- Repository: https://github.com/packtpublishing/mastering-node.js-web-development

## Overview

This repository is the chapter-by-chapter code accompanying a Node.js web-development book, not one continuously versioned application. Its culminating example is SportsStore: users browse a catalog and place orders, while administrators manage store data. The tree documents earlier examples of templating, forms, persistence, sessions, REST APIs, and authentication. Sampled source confirms ORM persistence for catalog entities and orders; the precise wiring among the unsampled application layers is therefore not shown.

Main entry points: [`Chapter 16/sportsstore/src`](https://github.com/packtpublishing/mastering-node.js-web-development/tree/main/Chapter%2016/sportsstore/src) (Store client), [`Chapter 16/sportsstore/src/server.ts`](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/server.ts) (SportsStore server), [`Chapter 11/End of Chapter/part2app/src/server/server.ts`](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2011/End%20of%20Chapter/part2app/src/server/server.ts) (HTTP handling), [`Chapter 16/sportsstore/src/routes/catalog.ts`](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/routes/catalog.ts) (Catalog routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sportsstore["SportsStore"]
  node_sports_server["SportsStore server<br/>[server.ts]"]
  node_catalog_routes["Catalog routes<br/>[catalog.ts]"]
  node_store_client["Store client"]
  node_cart_orders["Cart and orders"]
end

subgraph group_store_data["Store data"]
  node_catalog_repo["Catalog repository"]
  node_catalog_storage["Catalog ORM storage<br/>[storage.ts]"]
  node_catalog_models["Catalog models<br/>[catalog_models.ts]"]
  node_orm_database[("ORM database")]
  node_order_storage["Order persistence<br/>[order_storage.ts]"]
end

subgraph group_server_features["Server features"]
  node_server_http["HTTP handling<br/>[server.ts]"]
  node_form_handling["Form handling<br/>[forms.ts]"]
  node_data_access["Data access<br/>[repository.ts]"]
  node_sessions["Session handling<br/>[middleware.ts]"]
  node_custom_templates["Custom templates<br/>[custom_engine.ts]"]
end

subgraph group_api_auth["API and identity"]
  node_rest_api["REST API<br/>[results_api.ts]"]
  node_api_validation["API validation"]
  node_authentication["Authentication<br/>[index.ts]"]
  node_auth_store["Auth storage<br/>[orm_authstore.ts]"]
end

node_shopper(("Shopper"))
node_admin(("Administrator"))

node_shopper -->|"uses"| node_store_client
node_store_client -->|"HTTP requests"| node_sports_server
node_sports_server -->|"routes requests"| node_catalog_routes
node_catalog_routes -->|"catalog access"| node_catalog_repo
node_catalog_repo -->|"storage operations"| node_catalog_storage
node_catalog_storage -->|"upserts entities"| node_catalog_models
node_catalog_models -->|"ORM persistence"| node_orm_database
node_admin -->|"uses"| node_sports_server
node_store_client -->|"submits orders"| node_cart_orders
node_cart_orders -->|"stores order"| node_order_storage
node_order_storage -->|"transactional writes"| node_orm_database
node_server_http -->|"handles forms"| node_form_handling
node_form_handling -->|"uses repository"| node_data_access
node_server_http -->|"middleware"| node_sessions
node_rest_api -->|"validates input"| node_api_validation
node_authentication -->|"uses storage"| node_auth_store

click node_sports_server "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/server.ts"
click node_catalog_routes "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/routes/catalog.ts"
click node_catalog_repo "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/catalog_repository.ts"
click node_catalog_storage "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/orm/storage.ts"
click node_catalog_models "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/orm/models/catalog_models.ts"
click node_order_storage "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2021/End%20of%20Chapter/sportsstore/src/data/orm/order_storage.ts"
click node_store_client "https://github.com/packtpublishing/mastering-node.js-web-development/tree/main/Chapter%2016/sportsstore/src"
click node_cart_orders "https://github.com/packtpublishing/mastering-node.js-web-development/tree/main/Chapter%2021/End%20of%20Chapter/sportsstore/src"
click node_server_http "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2011/End%20of%20Chapter/part2app/src/server/server.ts"
click node_form_handling "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2011/End%20of%20Chapter/part2app/src/server/forms.ts"
click node_data_access "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2012/End%20of%20Chapter/part2app/src/server/data/repository.ts"
click node_sessions "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2013/End%20of%20Chapter/part2app/src/server/sessions/middleware.ts"
click node_rest_api "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2014/End%20of%20Chapter/part2app/src/server/api/results_api.ts"
click node_api_validation "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2014/End%20of%20Chapter/part2app/src/server/api/results_api_validation.ts"
click node_authentication "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2015/End%20of%20Chapter/part2app/src/server/auth/index.ts"
click node_auth_store "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2015/End%20of%20Chapter/part2app/src/server/auth/orm_authstore.ts"
click node_custom_templates "https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2010/End%20of%20Chapter/part2app/src/server/custom_engine.ts"

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_sports_server,node_catalog_routes,node_store_client,node_cart_orders toneBlue
class node_catalog_repo,node_catalog_storage,node_catalog_models,node_orm_database,node_order_storage toneAmber
class node_server_http,node_form_handling,node_data_access,node_sessions,node_custom_templates toneMint
class node_rest_api,node_api_validation,node_authentication,node_auth_store toneRose
class node_shopper,node_admin toneIndigo
```

## Components

### SportsStore

- [SportsStore server](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/server.ts): `Chapter 16/sportsstore/src/server.ts`
- [Catalog routes](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/routes/catalog.ts): `Chapter 16/sportsstore/src/routes/catalog.ts`
- [Store client](https://github.com/packtpublishing/mastering-node.js-web-development/tree/main/Chapter%2016/sportsstore/src): `Chapter 16/sportsstore/src`
- [Cart and orders](https://github.com/packtpublishing/mastering-node.js-web-development/tree/main/Chapter%2021/End%20of%20Chapter/sportsstore/src): `Chapter 21/End of Chapter/sportsstore/src`

### Store data

- [Catalog repository](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/catalog_repository.ts): `Chapter 16/sportsstore/src/data/catalog_repository.ts`
- [Catalog ORM storage](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/orm/storage.ts): `Chapter 16/sportsstore/src/data/orm/storage.ts`
- [Catalog models](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2016/sportsstore/src/data/orm/models/catalog_models.ts): `Chapter 16/sportsstore/src/data/orm/models/catalog_models.ts`
- **ORM database**
- [Order persistence](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2021/End%20of%20Chapter/sportsstore/src/data/orm/order_storage.ts): `Chapter 21/End of Chapter/sportsstore/src/data/orm/order_storage.ts`

### Server features

- [HTTP handling](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2011/End%20of%20Chapter/part2app/src/server/server.ts): `Chapter 11/End of Chapter/part2app/src/server/server.ts`
- [Form handling](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2011/End%20of%20Chapter/part2app/src/server/forms.ts): `Chapter 11/End of Chapter/part2app/src/server/forms.ts`
- [Data access](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2012/End%20of%20Chapter/part2app/src/server/data/repository.ts): `Chapter 12/End of Chapter/part2app/src/server/data/repository.ts`
- [Session handling](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2013/End%20of%20Chapter/part2app/src/server/sessions/middleware.ts): `Chapter 13/End of Chapter/part2app/src/server/sessions/middleware.ts`
- [Custom templates](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2010/End%20of%20Chapter/part2app/src/server/custom_engine.ts): `Chapter 10/End of Chapter/part2app/src/server/custom_engine.ts`

### API and identity

- [REST API](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2014/End%20of%20Chapter/part2app/src/server/api/results_api.ts): `Chapter 14/End of Chapter/part2app/src/server/api/results_api.ts`
- [API validation](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2014/End%20of%20Chapter/part2app/src/server/api/results_api_validation.ts): `Chapter 14/End of Chapter/part2app/src/server/api/results_api_validation.ts`
- [Authentication](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2015/End%20of%20Chapter/part2app/src/server/auth/index.ts): `Chapter 15/End of Chapter/part2app/src/server/auth/index.ts`
- [Auth storage](https://github.com/packtpublishing/mastering-node.js-web-development/blob/main/Chapter%2015/End%20of%20Chapter/part2app/src/server/auth/orm_authstore.ts): `Chapter 15/End of Chapter/part2app/src/server/auth/orm_authstore.ts`

### Other components

- **Shopper**
- **Administrator**

## Connections

- Shopper → Store client: uses
- Store client → SportsStore server: HTTP requests
- SportsStore server → Catalog routes: routes requests
- Catalog routes → Catalog repository: catalog access
- Catalog repository → Catalog ORM storage: storage operations
- Catalog ORM storage → Catalog models: upserts entities
- Catalog models → ORM database: ORM persistence
- Administrator → SportsStore server: uses
- Store client → Cart and orders: submits orders
- Cart and orders → Order persistence: stores order
- Order persistence → ORM database: transactional writes
- HTTP handling → Form handling: handles forms
- Form handling → Data access: uses repository
- HTTP handling → Session handling: middleware
- REST API → API validation: validates input
- Authentication → Auth storage: uses storage
