# pleastandby/pharmacy architecture

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

- Interactive diagram: https://gitdiagram.com/pleastandby/pharmacy
- Repository: https://github.com/pleastandby/pharmacy

## Overview

Pharmacy Management System is a Java Swing desktop application for role-based pharmacy operations backed by MariaDB. The principal workflow is sign-in, role-specific navigation, then inventory/customer lookup and checkout; sales update stock and can later be reviewed or cancelled. Separate capabilities include stock/expiry alerts, administrator summaries, and user administration. The graph follows documented capabilities and indexed source references; unsampled modules are represented at their exact tree paths, but their internal behavior and some links are not inferred.

Main entry points: [`src/main/java/com/pharmacy/gui`](https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/gui) (Role dashboards), [`src/main/java/com/pharmacy/service/MedicineService.java`](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/MedicineService.java) (Inventory service), [`src/main/java/com/pharmacy/dao`](https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/dao) (Data access), [`src/main/java/com/pharmacy/gui/SaleFrame.java`](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/SaleFrame.java) (Checkout and history)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Desktop entry"]
  node_main["Application start<br/>[Main.java]"]
  node_login["Sign-in<br/>[LoginFrame.java]"]
  node_dashboards["Role dashboards"]
end

subgraph group_operations["Pharmacy operations"]
  node_inventory_ui["Inventory screens<br/>[MedicineFrame.java]"]
  node_customers_ui["Customer records<br/>[CustomerFrame.java]"]
  node_sales_ui["Checkout and history<br/>[SaleFrame.java]"]
  node_user_admin["User administration"]
  node_reports["Summary reports"]
end

subgraph group_services["Domain services"]
  node_medicine_service["Inventory service"]
  node_customer_service["Customer service"]
  node_sale_service["Sales service<br/>[SaleService.java]"]
  node_user_service["User service<br/>[UserService.java]"]
  node_password["Password hashing<br/>[PasswordUtil.java]"]
  node_models["Domain records"]
end

subgraph group_persistence["Persistence"]
  node_daos["Data access"]
  node_connection["DB connection"]
  node_schema["Pharmacy schema<br/>[schema.sql]"]
end

node_operator(("Pharmacy user"))
node_mariadb[("MariaDB")]

node_operator -->|"starts"| node_main
node_main -->|"opens"| node_login
node_operator -->|"signs in"| node_login
node_login -->|"authenticates"| node_user_service
node_user_service -->|"verifies hashes"| node_password
node_login -->|"routes by role"| node_dashboards
node_dashboards -->|"opens"| node_inventory_ui
node_dashboards -->|"opens"| node_customers_ui
node_dashboards -->|"opens"| node_sales_ui
node_dashboards -->|"opens"| node_user_admin
node_dashboards -->|"builds summary"| node_reports
node_inventory_ui -->|"requests inventory"| node_medicine_service
node_customers_ui -->|"manages records"| node_customer_service
node_sales_ui -->|"loads customers"| node_customer_service
node_sales_ui -->|"loads medicines"| node_medicine_service
node_sales_ui -->|"creates and reviews"| node_sale_service
node_user_admin -->|"manages users"| node_user_service
node_reports -->|"reads stock alerts"| node_medicine_service
node_reports -->|"reads revenue"| node_sale_service
node_medicine_service -->|"queries inventory"| node_daos
node_customer_service -->|"queries customers"| node_daos
node_sale_service -->|"records sales and stock"| node_daos
node_user_service -->|"persists accounts"| node_daos
node_daos -->|"opens connections"| node_connection
node_connection -->|"connects"| node_mariadb
node_schema -->|"defines tables"| node_mariadb
node_sale_service -.->|"updates stock"| node_medicine_service

click node_main "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/Main.java"
click node_login "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/LoginFrame.java"
click node_dashboards "https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/gui"
click node_inventory_ui "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/MedicineFrame.java"
click node_customers_ui "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/CustomerFrame.java"
click node_sales_ui "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/SaleFrame.java"
click node_user_admin "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/UserManagementFrame.java"
click node_reports "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/DashboardFrame.java"
click node_medicine_service "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/MedicineService.java"
click node_customer_service "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/CustomerService.java"
click node_sale_service "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/SaleService.java"
click node_user_service "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/UserService.java"
click node_password "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/PasswordUtil.java"
click node_models "https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/models"
click node_daos "https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/dao"
click node_connection "https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/database/DatabaseConnection.java"
click node_schema "https://github.com/pleastandby/pharmacy/blob/master/database/schema.sql"

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_dashboards,node_operator toneBlue
class node_inventory_ui,node_customers_ui,node_sales_ui,node_user_admin,node_reports,node_mariadb toneAmber
class node_medicine_service,node_customer_service,node_sale_service,node_user_service,node_password,node_models toneMint
class node_daos,node_connection,node_schema toneRose
```

## Components

### Desktop entry

- [Application start](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/Main.java): `src/main/java/com/pharmacy/Main.java`
- [Sign-in](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/LoginFrame.java): `src/main/java/com/pharmacy/gui/LoginFrame.java`
- [Role dashboards](https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/gui): `src/main/java/com/pharmacy/gui`

### Pharmacy operations

- [Inventory screens](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/MedicineFrame.java): `src/main/java/com/pharmacy/gui/MedicineFrame.java`
- [Customer records](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/CustomerFrame.java): `src/main/java/com/pharmacy/gui/CustomerFrame.java`
- [Checkout and history](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/SaleFrame.java): `src/main/java/com/pharmacy/gui/SaleFrame.java`
- [User administration](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/UserManagementFrame.java): `src/main/java/com/pharmacy/gui/UserManagementFrame.java`
- [Summary reports](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/gui/DashboardFrame.java): `src/main/java/com/pharmacy/gui/DashboardFrame.java`

### Domain services

- [Inventory service](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/MedicineService.java): `src/main/java/com/pharmacy/service/MedicineService.java`
- [Customer service](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/CustomerService.java): `src/main/java/com/pharmacy/service/CustomerService.java`
- [Sales service](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/SaleService.java): `src/main/java/com/pharmacy/service/SaleService.java`
- [User service](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/UserService.java): `src/main/java/com/pharmacy/service/UserService.java`
- [Password hashing](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/service/PasswordUtil.java): `src/main/java/com/pharmacy/service/PasswordUtil.java`
- [Domain records](https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/models): `src/main/java/com/pharmacy/models`

### Persistence

- [Data access](https://github.com/pleastandby/pharmacy/tree/master/src/main/java/com/pharmacy/dao): `src/main/java/com/pharmacy/dao`
- [DB connection](https://github.com/pleastandby/pharmacy/blob/master/src/main/java/com/pharmacy/database/DatabaseConnection.java): `src/main/java/com/pharmacy/database/DatabaseConnection.java`
- [Pharmacy schema](https://github.com/pleastandby/pharmacy/blob/master/database/schema.sql): `database/schema.sql`

### Other components

- **Pharmacy user**
- **MariaDB**

## Connections

- Pharmacy user → Application start: starts (evidence: `README.md`)
- Application start → Sign-in: opens (evidence: `src/main/java/com/pharmacy/Main.java`)
- Pharmacy user → Sign-in: signs in (evidence: `README.md`)
- Sign-in → User service: authenticates (evidence: `src/main/java/com/pharmacy/gui/LoginFrame.java`)
- User service → Password hashing: verifies hashes (evidence: `src/main/java/com/pharmacy/service/UserService.java`)
- Sign-in → Role dashboards: routes by role (evidence: `src/main/java/com/pharmacy/gui/LoginFrame.java`)
- Role dashboards → Inventory screens: opens (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Role dashboards → Customer records: opens (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Role dashboards → Checkout and history: opens (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Role dashboards → User administration: opens (evidence: `src/main/java/com/pharmacy/gui/AdminDashboardFrame.java`)
- Role dashboards → Summary reports: builds summary (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Inventory screens → Inventory service: requests inventory (evidence: `src/main/java/com/pharmacy/gui/MedicineFrame.java`)
- Customer records → Customer service: manages records (evidence: `src/main/java/com/pharmacy/gui/CustomerFrame.java`)
- Checkout and history → Customer service: loads customers (evidence: `src/main/java/com/pharmacy/gui/SaleFrame.java`)
- Checkout and history → Inventory service: loads medicines (evidence: `src/main/java/com/pharmacy/gui/SaleFrame.java`)
- Checkout and history → Sales service: creates and reviews (evidence: `src/main/java/com/pharmacy/gui/SaleFrame.java`)
- User administration → User service: manages users (evidence: `src/main/java/com/pharmacy/gui/UserManagementFrame.java`)
- Summary reports → Inventory service: reads stock alerts (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Summary reports → Sales service: reads revenue (evidence: `src/main/java/com/pharmacy/gui/DashboardFrame.java`)
- Inventory service → Data access: queries inventory (evidence: `src/main/java/com/pharmacy/service/MedicineService.java`)
- Customer service → Data access: queries customers (evidence: `src/main/java/com/pharmacy/service/CustomerService.java`)
- Sales service → Data access: records sales and stock (evidence: `src/main/java/com/pharmacy/service/SaleService.java`)
- User service → Data access: persists accounts (evidence: `src/main/java/com/pharmacy/service/UserService.java`)
- Data access → DB connection: opens connections (evidence: `src/main/java/com/pharmacy/dao/MedicineDAO.java`)
- DB connection → MariaDB: connects (evidence: `src/main/java/com/pharmacy/database/DatabaseConnection.java`)
- Pharmacy schema → MariaDB: defines tables (evidence: `README.md`)
- Sales service → Inventory service: updates stock
