# sandip-1-1/java architecture

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

- Interactive diagram: https://gitdiagram.com/sandip-1-1/java
- Repository: https://github.com/sandip-1-1/java

## Overview

This is a single-user, terminal-based inventory manager. A user selects menu actions in Main, which validates console input and dispatches product operations to ProductDAO or stock, history, sorting, and report operations to InventoryService. Stock changes update quantity and record a transaction within one JDBC transaction; the DAOs persist data in SQLite. The README documents CRUD, SKU uniqueness, search, sorting, history, low-stock and valuation reports. Sampled excerpts show only part of Main, so some menu-to-service and DAO wiring is based on the documented workflow.

Main entry points: [`src/main/java/com/inventory/Main.java`](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/Main.java) (Menu and output), [`src/main/java/com/inventory/service/InventoryService.java`](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/service/InventoryService.java) (Inventory service), [`src/main/java/com/inventory/util/DatabaseConnection.java`](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/util/DatabaseConnection.java) (Database connection), [`src/main/java/com/inventory/dao/ProductDAO.java`](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/dao/ProductDAO.java) (Product DAO)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_terminal["Terminal UI"]
  node_main["Menu and output<br/>[Main.java]"]
  node_input["Input validation"]
end

subgraph group_domain["Inventory operations"]
  node_service["Inventory service"]
  node_exceptions["Business exceptions"]
end

subgraph group_persistence["Persistence"]
  node_productdao["Product DAO<br/>[ProductDAO.java]"]
  node_transactiondao["Transaction DAO"]
  node_dbconnection["Database connection"]
  node_sqlite[("SQLite database")]
  node_schema["Database schema<br/>[schema.sql]"]
end

subgraph group_models["Domain models"]
  node_product["Product model<br/>[Product.java]"]
  node_stocktransaction["Stock transaction model"]
  node_transactiontype["Transaction type"]
  node_validatable["Validation contract<br/>[Validatable.java]"]
end

node_user(("Terminal user"))

node_user -->|"chooses actions"| node_main
node_main -->|"reads input"| node_input
node_main -->|"initializes database"| node_dbconnection
node_main -->|"runs product actions"| node_productdao
node_main -->|"requests stock, reports"| node_service
node_main -->|"creates products"| node_product
node_service -->|"reads and updates"| node_productdao
node_service -->|"records and reads"| node_transactiondao
node_service -->|"opens stock transactions"| node_dbconnection
node_service -->|"creates history records"| node_stocktransaction
node_productdao -->|"opens connections"| node_dbconnection
node_transactiondao -->|"opens connections"| node_dbconnection
node_dbconnection -->|"connects"| node_sqlite
node_dbconnection -->|"loads schema"| node_schema
node_productdao -->|"maps query rows"| node_product
node_transactiondao -->|"maps query rows"| node_stocktransaction
node_stocktransaction -->|"uses type"| node_transactiontype
node_product -->|"implements"| node_validatable
node_stocktransaction -->|"implements"| node_validatable
node_productdao -->|"reports product errors"| node_exceptions
node_service -->|"reports stock errors"| node_exceptions

click node_main "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/Main.java"
click node_input "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/util/InputValidator.java"
click node_service "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/service/InventoryService.java"
click node_productdao "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/dao/ProductDAO.java"
click node_transactiondao "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/dao/StockTransactionDAO.java"
click node_dbconnection "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/util/DatabaseConnection.java"
click node_schema "https://github.com/sandip-1-1/java/blob/main/schema.sql"
click node_product "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/Product.java"
click node_stocktransaction "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/StockTransaction.java"
click node_transactiontype "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/TransactionType.java"
click node_validatable "https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/Validatable.java"
click node_exceptions "https://github.com/sandip-1-1/java/tree/main/src/main/java/com/inventory/exception"

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_main,node_input,node_user toneBlue
class node_service,node_exceptions toneAmber
class node_productdao,node_transactiondao,node_dbconnection,node_sqlite,node_schema toneMint
class node_product,node_stocktransaction,node_transactiontype,node_validatable toneRose
```

## Components

### Terminal UI

- [Menu and output](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/Main.java): `src/main/java/com/inventory/Main.java`
- [Input validation](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/util/InputValidator.java): `src/main/java/com/inventory/util/InputValidator.java`

### Inventory operations

- [Inventory service](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/service/InventoryService.java): `src/main/java/com/inventory/service/InventoryService.java`
- [Business exceptions](https://github.com/sandip-1-1/java/tree/main/src/main/java/com/inventory/exception): `src/main/java/com/inventory/exception`

### Persistence

- [Product DAO](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/dao/ProductDAO.java): `src/main/java/com/inventory/dao/ProductDAO.java`
- [Transaction DAO](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/dao/StockTransactionDAO.java): `src/main/java/com/inventory/dao/StockTransactionDAO.java`
- [Database connection](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/util/DatabaseConnection.java): `src/main/java/com/inventory/util/DatabaseConnection.java`
- **SQLite database**
- [Database schema](https://github.com/sandip-1-1/java/blob/main/schema.sql): `schema.sql`

### Domain models

- [Product model](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/Product.java): `src/main/java/com/inventory/model/Product.java`
- [Stock transaction model](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/StockTransaction.java): `src/main/java/com/inventory/model/StockTransaction.java`
- [Transaction type](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/TransactionType.java): `src/main/java/com/inventory/model/TransactionType.java`
- [Validation contract](https://github.com/sandip-1-1/java/blob/main/src/main/java/com/inventory/model/Validatable.java): `src/main/java/com/inventory/model/Validatable.java`

### Other components

- **Terminal user**

## Connections

- Terminal user → Menu and output: chooses actions
- Menu and output → Input validation: reads input
- Menu and output → Database connection: initializes database
- Menu and output → Product DAO: runs product actions
- Menu and output → Inventory service: requests stock, reports
- Menu and output → Product model: creates products
- Inventory service → Product DAO: reads and updates
- Inventory service → Transaction DAO: records and reads
- Inventory service → Database connection: opens stock transactions
- Inventory service → Stock transaction model: creates history records
- Product DAO → Database connection: opens connections
- Transaction DAO → Database connection: opens connections
- Database connection → SQLite database: connects
- Database connection → Database schema: loads schema
- Product DAO → Product model: maps query rows
- Transaction DAO → Stock transaction model: maps query rows
- Stock transaction model → Transaction type: uses type
- Product model → Validation contract: implements
- Stock transaction model → Validation contract: implements
- Product DAO → Business exceptions: reports product errors
- Inventory service → Business exceptions: reports stock errors
