# sansarsharma/bookstoreapplication architecture

> Architecture diagram of the GitHub repository sansarsharma/bookstoreapplication, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sansarsharma/bookstoreapplication
- Repository: https://github.com/sansarsharma/bookstoreapplication

## Overview

This JavaFX bookstore supports customer sign-in, browsing and cart checkout with loyalty-point status, alongside owner management of books, customer accounts, and balances. SceneManager coordinates screens; handlers implement authentication, checkout and administration, with DatabaseManager persisting catalog and customer data in MySQL. The graph retains the documented preload capability, though source excerpts do not show its exact startup wiring. Relationships shown are limited to calls or transitions documented in the README or SOURCE INDEX; unsampled features are represented without guessed links.

Main entry points: [`src/main/java/com/bookstore/scenes/SceneManager.java`](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/SceneManager.java) (Scene navigation), [`src/main/java/com/bookstore/database/DatabaseManager.java`](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/database/DatabaseManager.java) (Catalog and account persistence), [`src/main/java/com/bookstore/handlers/OwnerHandler.java`](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/OwnerHandler.java) (Owner operations), [`src/main/java/com/bookstore/models/Customer.java`](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Customer.java) (Customer account)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["JavaFX screens"]
  node_app["Application startup<br/>[App.java]"]
  node_scene_manager["Scene navigation<br/>[SceneManager.java]"]
  node_login_scene["Login screen<br/>[LoginScene.java]"]
  node_customer_scene["Customer dashboard<br/>[CustomerScene.java]"]
  node_cart_scene["Cart screen"]
  node_checkout_scene["Checkout screen"]
  node_thanks_scene["Purchase confirmation<br/>[ThankYouScene.java]"]
  node_owner_scene["Owner dashboard<br/>[OwnerScene.java]"]
  node_book_scene["Book management screen"]
  node_user_scene["Customer management screen"]
end

subgraph group_operations["Store operations"]
  node_login_handler["Authentication<br/>[LoginHandler.java]"]
  node_cart_handler["Cart operations"]
  node_payment_handler["Payment and points"]
  node_owner_handler["Owner operations<br/>[OwnerHandler.java]"]
  node_validator["Input validation"]
end

subgraph group_domain["Domain and loyalty"]
  node_book["Book<br/>[Book.java]"]
  node_customer_model["Customer account<br/>[Customer.java]"]
  node_user_model["User identity<br/>[User.java]"]
  node_owner_model["Owner identity<br/>[Owner.java]"]
  node_cart_model["Cart model<br/>[ShoppingCart.java]"]
  node_loyalty["Loyalty status states"]
end

subgraph group_persistence["Persistence and security"]
  node_hasher["Password hashing"]
  node_db_manager["Catalog and account persistence"]
  node_db_connection["MySQL connection"]
  node_mysql[("MySQL database")]
  node_preloaded["Preloaded books and users"]
end

node_customer(("Customer"))
node_owner(("Owner"))

node_app -->|"creates"| node_scene_manager
node_scene_manager -->|"shows"| node_login_scene
node_scene_manager -->|"shows"| node_customer_scene
node_scene_manager -->|"shows"| node_cart_scene
node_scene_manager -->|"shows"| node_checkout_scene
node_scene_manager -->|"shows"| node_thanks_scene
node_scene_manager -->|"shows"| node_owner_scene
node_scene_manager -->|"shows"| node_book_scene
node_scene_manager -->|"shows"| node_user_scene
node_login_scene -->|"delegates to"| node_login_handler
node_login_handler -->|"authenticates via"| node_db_manager
node_login_handler -->|"checks hash"| node_hasher
node_customer_scene -->|"navigates via"| node_scene_manager
node_cart_scene -->|"uses"| node_cart_handler
node_cart_handler -->|"stores items"| node_book
node_cart_scene -->|"navigates via"| node_scene_manager
node_checkout_scene -->|"uses"| node_payment_handler
node_checkout_scene -->|"uses"| node_cart_handler
node_checkout_scene -->|"navigates via"| node_scene_manager
node_payment_handler -->|"updates account"| node_db_manager
node_payment_handler -->|"updates points"| node_customer_model
node_owner_scene -->|"navigates via"| node_scene_manager
node_book_scene -->|"delegates to"| node_owner_handler
node_user_scene -->|"delegates to"| node_owner_handler
node_owner_handler -->|"reads and writes"| node_db_manager
node_owner_handler -->|"validates with"| node_validator
node_owner_handler -->|"creates"| node_book
node_owner_handler -->|"creates"| node_customer_model
node_customer_model -->|"extends"| node_user_model
node_owner_model -->|"extends"| node_user_model
node_customer_model -->|"updates status"| node_loyalty
node_scene_manager -->|"loads customer"| node_db_manager
node_db_manager -->|"opens connection"| node_db_connection
node_db_manager -->|"reads and writes"| node_mysql
node_db_connection -->|"connects to"| node_mysql
node_db_manager -->|"loads records"| node_book
node_db_manager -->|"loads records"| node_customer_model
node_customer_model -->|"hashes password"| node_hasher
node_preloaded -.->|"initial data"| node_db_manager
node_cart_model -.->|"contains items"| node_book

click node_app "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/App.java"
click node_scene_manager "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/SceneManager.java"
click node_login_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/LoginScene.java"
click node_customer_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/CustomerScene.java"
click node_cart_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/ShoppingCartScene.java"
click node_checkout_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/CustomerCostScene.java"
click node_thanks_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/ThankYouScene.java"
click node_owner_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerScene.java"
click node_book_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerBookManageScene.java"
click node_user_scene "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerUserManageScene.java"
click node_login_handler "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/LoginHandler.java"
click node_cart_handler "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/ShoppingCartHandler.java"
click node_payment_handler "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/PaymentHandler.java"
click node_owner_handler "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/OwnerHandler.java"
click node_book "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Book.java"
click node_customer_model "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Customer.java"
click node_user_model "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/User.java"
click node_owner_model "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Owner.java"
click node_cart_model "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/ShoppingCart.java"
click node_loyalty "https://github.com/sansarsharma/bookstoreapplication/tree/main/src/main/java/com/bookstore/states"
click node_validator "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/utilities/InputValidator.java"
click node_hasher "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/utilities/PasswordHasher.java"
click node_db_manager "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/database/DatabaseManager.java"
click node_db_connection "https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/database/DatabaseConnection.java"
click node_preloaded "https://github.com/sansarsharma/bookstoreapplication/tree/main/src/main/resources"

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_scene_manager,node_login_scene,node_customer_scene,node_cart_scene,node_checkout_scene,node_thanks_scene,node_owner_scene,node_book_scene,node_user_scene toneBlue
class node_login_handler,node_cart_handler,node_payment_handler,node_owner_handler,node_validator toneAmber
class node_book,node_customer_model,node_user_model,node_owner_model,node_cart_model,node_loyalty toneMint
class node_hasher,node_db_manager,node_db_connection,node_mysql,node_preloaded toneRose
class node_customer,node_owner toneIndigo
```

## Components

### JavaFX screens

- [Application startup](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/App.java): `src/main/java/com/bookstore/App.java`
- [Scene navigation](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/SceneManager.java): `src/main/java/com/bookstore/scenes/SceneManager.java`
- [Login screen](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/LoginScene.java): `src/main/java/com/bookstore/scenes/LoginScene.java`
- [Customer dashboard](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/CustomerScene.java): `src/main/java/com/bookstore/scenes/CustomerScene.java`
- [Cart screen](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/ShoppingCartScene.java): `src/main/java/com/bookstore/scenes/ShoppingCartScene.java`
- [Checkout screen](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/CustomerCostScene.java): `src/main/java/com/bookstore/scenes/CustomerCostScene.java`
- [Purchase confirmation](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/ThankYouScene.java): `src/main/java/com/bookstore/scenes/ThankYouScene.java`
- [Owner dashboard](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerScene.java): `src/main/java/com/bookstore/scenes/OwnerScene.java`
- [Book management screen](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerBookManageScene.java): `src/main/java/com/bookstore/scenes/OwnerBookManageScene.java`
- [Customer management screen](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/scenes/OwnerUserManageScene.java): `src/main/java/com/bookstore/scenes/OwnerUserManageScene.java`

### Store operations

- [Authentication](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/LoginHandler.java): `src/main/java/com/bookstore/handlers/LoginHandler.java`
- [Cart operations](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/ShoppingCartHandler.java): `src/main/java/com/bookstore/handlers/ShoppingCartHandler.java`
- [Payment and points](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/PaymentHandler.java): `src/main/java/com/bookstore/handlers/PaymentHandler.java`
- [Owner operations](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/handlers/OwnerHandler.java): `src/main/java/com/bookstore/handlers/OwnerHandler.java`
- [Input validation](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/utilities/InputValidator.java): `src/main/java/com/bookstore/utilities/InputValidator.java`

### Domain and loyalty

- [Book](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Book.java): `src/main/java/com/bookstore/models/Book.java`
- [Customer account](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Customer.java): `src/main/java/com/bookstore/models/Customer.java`
- [User identity](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/User.java): `src/main/java/com/bookstore/models/User.java`
- [Owner identity](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/Owner.java): `src/main/java/com/bookstore/models/Owner.java`
- [Cart model](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/models/ShoppingCart.java): `src/main/java/com/bookstore/models/ShoppingCart.java`
- [Loyalty status states](https://github.com/sansarsharma/bookstoreapplication/tree/main/src/main/java/com/bookstore/states): `src/main/java/com/bookstore/states`

### Persistence and security

- [Password hashing](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/utilities/PasswordHasher.java): `src/main/java/com/bookstore/utilities/PasswordHasher.java`
- [Catalog and account persistence](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/database/DatabaseManager.java): `src/main/java/com/bookstore/database/DatabaseManager.java`
- [MySQL connection](https://github.com/sansarsharma/bookstoreapplication/blob/main/src/main/java/com/bookstore/database/DatabaseConnection.java): `src/main/java/com/bookstore/database/DatabaseConnection.java`
- **MySQL database**
- [Preloaded books and users](https://github.com/sansarsharma/bookstoreapplication/tree/main/src/main/resources): `src/main/resources`

### Other components

- **Customer**
- **Owner**

## Connections

- Application startup → Scene navigation: creates (evidence: `src/main/java/com/bookstore/App.java`)
- Scene navigation → Login screen: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Customer dashboard: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Cart screen: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Checkout screen: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Purchase confirmation: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Owner dashboard: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Book management screen: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Scene navigation → Customer management screen: shows (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Login screen → Authentication: delegates to (evidence: `src/main/java/com/bookstore/scenes/LoginScene.java`)
- Authentication → Catalog and account persistence: authenticates via (evidence: `src/main/java/com/bookstore/handlers/LoginHandler.java`)
- Authentication → Password hashing: checks hash (evidence: `src/main/java/com/bookstore/handlers/LoginHandler.java`)
- Customer dashboard → Scene navigation: navigates via (evidence: `src/main/java/com/bookstore/scenes/CustomerScene.java`)
- Cart screen → Cart operations: uses (evidence: `src/main/java/com/bookstore/scenes/ShoppingCartScene.java`)
- Cart operations → Book: stores items (evidence: `src/main/java/com/bookstore/handlers/ShoppingCartHandler.java`)
- Cart screen → Scene navigation: navigates via (evidence: `src/main/java/com/bookstore/scenes/ShoppingCartScene.java`)
- Checkout screen → Payment and points: uses (evidence: `src/main/java/com/bookstore/scenes/CustomerCostScene.java`)
- Checkout screen → Cart operations: uses (evidence: `src/main/java/com/bookstore/scenes/CustomerCostScene.java`)
- Checkout screen → Scene navigation: navigates via (evidence: `src/main/java/com/bookstore/scenes/CustomerCostScene.java`)
- Payment and points → Catalog and account persistence: updates account (evidence: `src/main/java/com/bookstore/handlers/PaymentHandler.java`)
- Payment and points → Customer account: updates points (evidence: `src/main/java/com/bookstore/handlers/PaymentHandler.java`)
- Owner dashboard → Scene navigation: navigates via (evidence: `src/main/java/com/bookstore/scenes/OwnerScene.java`)
- Book management screen → Owner operations: delegates to (evidence: `src/main/java/com/bookstore/scenes/OwnerBookManageScene.java`)
- Customer management screen → Owner operations: delegates to (evidence: `src/main/java/com/bookstore/scenes/OwnerUserManageScene.java`)
- Owner operations → Catalog and account persistence: reads and writes (evidence: `src/main/java/com/bookstore/handlers/OwnerHandler.java`)
- Owner operations → Input validation: validates with (evidence: `src/main/java/com/bookstore/handlers/OwnerHandler.java`)
- Owner operations → Book: creates (evidence: `src/main/java/com/bookstore/handlers/OwnerHandler.java`)
- Owner operations → Customer account: creates (evidence: `src/main/java/com/bookstore/handlers/OwnerHandler.java`)
- Customer account → User identity: extends (evidence: `src/main/java/com/bookstore/models/Customer.java`)
- Owner identity → User identity: extends (evidence: `src/main/java/com/bookstore/models/Owner.java`)
- Customer account → Loyalty status states: updates status (evidence: `src/main/java/com/bookstore/models/Customer.java`)
- Scene navigation → Catalog and account persistence: loads customer (evidence: `src/main/java/com/bookstore/scenes/SceneManager.java`)
- Catalog and account persistence → MySQL connection: opens connection (evidence: `src/main/java/com/bookstore/database/DatabaseManager.java`)
- Catalog and account persistence → MySQL database: reads and writes (evidence: `README.md`)
- MySQL connection → MySQL database: connects to (evidence: `README.md`)
- Catalog and account persistence → Book: loads records (evidence: `src/main/java/com/bookstore/database/DatabaseManager.java`)
- Catalog and account persistence → Customer account: loads records (evidence: `src/main/java/com/bookstore/database/DatabaseManager.java`)
- Customer account → Password hashing: hashes password (evidence: `src/main/java/com/bookstore/models/Customer.java`)
- Preloaded books and users → Catalog and account persistence: initial data (evidence: `README.md`)
- Cart model → Book: contains items (evidence: `src/main/java/com/bookstore/models/ShoppingCart.java`)
