# sadatrafsanjani/point-of-sales architecture

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

- Interactive diagram: https://gitdiagram.com/sadatrafsanjani/point-of-sales
- Repository: https://github.com/sadatrafsanjani/point-of-sales

## Overview

This JavaFX desktop application supports inventory administration and point-of-sale transactions: staff sign in, manage products and related records, record purchases, sell items, and review invoices and reports. The POS flow selects products, builds a cart, accepts payment, records the invoice and sales, and updates stock. Dashboard charts summarize invoices and product stock; PDF invoice generation is a separate documented capability. The sampled controllers show model calls, but most model-to-DAO wiring was not sampled, so those links are omitted. MySQL and Hibernate are documented technologies.

Main entry points: [`src/main/java/com/rafsan/inventory/model`](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/model) (Domain models), [`src/main/java/com/rafsan/inventory/controller/login/LoginController.java`](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/login/LoginController.java) (Login), [`src/main/java/com/rafsan/inventory/controller/pos/PosController.java`](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/PosController.java) (POS cart and payment), [`src/main/java/com/rafsan/inventory/controller/pos/InvoiceController.java`](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/InvoiceController.java) (Invoice checkout)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_main["Application entry<br/>[MainApp.java]"]
  node_login["Login"]
  node_dashboard["Dashboard charts"]
end

subgraph group_operations["Inventory operations"]
  node_catalog["Product and category"]
  node_supplier["Supplier management"]
  node_employee["Employee management"]
  node_purchases["Purchase records"]
end

subgraph group_sales["Sales and reporting"]
  node_pos["POS cart and payment<br/>[PosController.java]"]
  node_invoice["Invoice checkout"]
  node_confirmation["Sale confirmation"]
  node_sales["Sales records"]
  node_reports["Invoice reports"]
  node_pdf["Invoice PDF<br/>[PrintInvoice.java]"]
end

subgraph group_persistence["Persistence"]
  node_models["Domain models"]
  node_daos["Data access"]
  node_entities["Persistence entities"]
  node_hibernate["Hibernate setup<br/>[HibernateUtil.java]"]
end

node_operator(("Staff user"))
node_mysql[("MySQL database")]

node_operator -->|"launches"| node_main
node_main -->|"opens"| node_login
node_operator -->|"signs in"| node_login
node_login -->|"checks credentials"| node_models
node_login -->|"opens dashboard"| node_dashboard
node_operator -->|"maintains catalog"| node_catalog
node_operator -->|"maintains suppliers"| node_supplier
node_operator -->|"manages staff"| node_employee
node_operator -->|"records purchases"| node_purchases
node_operator -->|"builds cart"| node_pos
node_pos -->|"loads products"| node_models
node_pos -->|"opens checkout"| node_invoice
node_invoice -->|"records sale"| node_models
node_invoice -->|"opens confirmation"| node_confirmation
node_operator -->|"reviews sales"| node_sales
node_operator -->|"reviews invoices"| node_reports
node_dashboard -->|"loads chart data"| node_models
node_catalog -->|"manages records"| node_models
node_supplier -->|"manages records"| node_models
node_employee -->|"manages records"| node_models
node_purchases -->|"loads purchases"| node_models
node_sales -->|"loads sales"| node_models
node_reports -->|"loads invoices"| node_models
node_models --> node_daos
node_daos --> node_entities
node_hibernate -->|"connects"| node_mysql

click node_main "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/MainApp.java"
click node_login "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/login/LoginController.java"
click node_dashboard "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/admin/AdminController.java"
click node_catalog "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/product"
click node_supplier "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/supplier"
click node_employee "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/employee"
click node_purchases "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/purchase"
click node_pos "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/PosController.java"
click node_invoice "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/InvoiceController.java"
click node_confirmation "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/ConfirmController.java"
click node_sales "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/sales/SalesController.java"
click node_reports "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/report"
click node_pdf "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/pdf/PrintInvoice.java"
click node_models "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/model"
click node_daos "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/dao"
click node_entities "https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/entity"
click node_hibernate "https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/HibernateUtil.java"

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_login,node_dashboard,node_operator toneBlue
class node_catalog,node_supplier,node_employee,node_purchases,node_mysql toneAmber
class node_pos,node_invoice,node_confirmation,node_sales,node_reports,node_pdf toneMint
class node_models,node_daos,node_entities,node_hibernate toneRose
```

## Components

### Desktop application

- [Application entry](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/MainApp.java): `src/main/java/com/rafsan/inventory/MainApp.java`
- [Login](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/login/LoginController.java): `src/main/java/com/rafsan/inventory/controller/login/LoginController.java`
- [Dashboard charts](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/admin/AdminController.java): `src/main/java/com/rafsan/inventory/controller/admin/AdminController.java`

### Inventory operations

- [Product and category](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/product): `src/main/java/com/rafsan/inventory/controller/product`
- [Supplier management](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/supplier): `src/main/java/com/rafsan/inventory/controller/supplier`
- [Employee management](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/employee): `src/main/java/com/rafsan/inventory/controller/employee`
- [Purchase records](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/purchase): `src/main/java/com/rafsan/inventory/controller/purchase`

### Sales and reporting

- [POS cart and payment](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/PosController.java): `src/main/java/com/rafsan/inventory/controller/pos/PosController.java`
- [Invoice checkout](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/InvoiceController.java): `src/main/java/com/rafsan/inventory/controller/pos/InvoiceController.java`
- [Sale confirmation](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/pos/ConfirmController.java): `src/main/java/com/rafsan/inventory/controller/pos/ConfirmController.java`
- [Sales records](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/controller/sales/SalesController.java): `src/main/java/com/rafsan/inventory/controller/sales/SalesController.java`
- [Invoice reports](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/controller/report): `src/main/java/com/rafsan/inventory/controller/report`
- [Invoice PDF](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/pdf/PrintInvoice.java): `src/main/java/com/rafsan/inventory/pdf/PrintInvoice.java`

### Persistence

- [Domain models](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/model): `src/main/java/com/rafsan/inventory/model`
- [Data access](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/dao): `src/main/java/com/rafsan/inventory/dao`
- [Persistence entities](https://github.com/sadatrafsanjani/point-of-sales/tree/master/src/main/java/com/rafsan/inventory/entity): `src/main/java/com/rafsan/inventory/entity`
- [Hibernate setup](https://github.com/sadatrafsanjani/point-of-sales/blob/master/src/main/java/com/rafsan/inventory/HibernateUtil.java): `src/main/java/com/rafsan/inventory/HibernateUtil.java`

### Other components

- **Staff user**
- **MySQL database**

## Connections

- Staff user → Application entry: launches
- Application entry → Login: opens
- Staff user → Login: signs in
- Login → Domain models: checks credentials
- Login → Dashboard charts: opens dashboard
- Staff user → Product and category: maintains catalog
- Staff user → Supplier management: maintains suppliers
- Staff user → Employee management: manages staff
- Staff user → Purchase records: records purchases
- Staff user → POS cart and payment: builds cart
- POS cart and payment → Domain models: loads products
- POS cart and payment → Invoice checkout: opens checkout
- Invoice checkout → Domain models: records sale
- Invoice checkout → Sale confirmation: opens confirmation
- Staff user → Sales records: reviews sales
- Staff user → Invoice reports: reviews invoices
- Dashboard charts → Domain models: loads chart data
- Product and category → Domain models: manages records
- Supplier management → Domain models: manages records
- Employee management → Domain models: manages records
- Purchase records → Domain models: loads purchases
- Sales records → Domain models: loads sales
- Invoice reports → Domain models: loads invoices
- Domain models → Data access
- Data access → Persistence entities
- Hibernate setup → MySQL database: connects
