# ryuka2006/optical-store architecture

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

- Interactive diagram: https://gitdiagram.com/ryuka2006/optical-store
- Repository: https://github.com/ryuka2006/optical-store

## Overview

Optical-Store is a role-based optical retail and clinic application. Staff workspaces support product/customer and sales operations; cashiers complete checkout and refunds, while optometrists manage appointments, examinations and prescriptions. Admin APIs cover account and operational management. The PHP APIs connect to a shared MySQL database, with role checks provided by shared security code. The README gives no workflow detail, and browser-to-API wiring was not shown, so those links are left unasserted; some role-specific features are represented at directory level.

Main entry points: [`Admin/Api/database.php`](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/database.php) (Database Connection), [`Admin/Api/guard.php`](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/guard.php) (API Security), [`Cashier/api/database.php`](https://github.com/ryuka2006/optical-store/blob/main/Cashier/api/database.php) (Cashier Data Access), [`Sale-Staff/API/database.php`](https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/database.php) (Sales Data Access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_admin["Administration"]
  node_admin_ui["Admin Interface<br/>[admin.js]"]
  node_admin_api["Admin APIs"]
  node_admin_crud["Generic CRUD<br/>[crud.php]"]
  node_admin_users["User Management<br/>[users.php]"]
  node_admin_exams["Examinations<br/>[examinations.php]"]
  node_admin_orders["Sales Orders<br/>[sale_order.php]"]
end

subgraph group_sales["Sales Workspaces"]
  node_cashier_ui["Cashier Interface<br/>[cashier.js]"]
  node_cashier_workspace["Cashier Workspace<br/>[workspace.php]"]
  node_cashier_transactions["Cashier Transactions"]
  node_sales_ui["Sales Interface<br/>[salestaff.js]"]
  node_sales_workspace["Sales Workspace<br/>[workspace.php]"]
  node_sales_products["Product Management<br/>[products.php]"]
end

subgraph group_clinical["Clinical Workspace"]
  node_optom_ui["Optometrist Interface<br/>[index.js]"]
  node_clinical_api["Clinical APIs"]
  node_clinical_dashboard["Clinical Dashboard<br/>[dashboard.php]"]
end

subgraph group_shared["Shared Services"]
  node_security["API Security<br/>[guard.php]"]
  node_admin_db[("Database Connection<br/>[database.php]")]
  node_cashier_db["Cashier Data Access<br/>[database.php]"]
  node_sales_db["Sales Data Access<br/>[database.php]"]
  node_clinical_db["Clinical Data Access<br/>[database.php]"]
end

node_admin_actor(("Administrator"))
node_cashier_actor(("Cashier"))
node_sales_actor(("Sales Staff"))
node_optom_actor(("Optometrist"))

node_admin_crud -->|"requires security"| node_security
node_admin_users -->|"checks access"| node_security
node_admin_users -->|"queries"| node_admin_db
node_admin_exams -->|"checks access"| node_security
node_admin_exams -->|"queries"| node_admin_db
node_admin_orders -->|"checks access"| node_security
node_admin_orders -->|"queries"| node_admin_db
node_cashier_workspace -->|"includes access"| node_cashier_db
node_cashier_workspace -->|"writes transactions"| node_admin_db
node_cashier_db -->|"requires security"| node_security
node_cashier_db -->|"loads connection"| node_admin_db
node_cashier_transactions -->|"uses access"| node_cashier_db
node_sales_workspace -->|"includes access"| node_sales_db
node_sales_workspace -->|"updates sales data"| node_admin_db
node_sales_products -->|"uses access"| node_sales_db
node_sales_db -->|"requires security"| node_security
node_sales_db -->|"loads connection"| node_admin_db
node_clinical_api -->|"uses access"| node_clinical_db
node_clinical_db -->|"requires security"| node_security
node_clinical_db -->|"loads connection"| node_admin_db

click node_admin_ui "https://github.com/ryuka2006/optical-store/blob/main/Admin/JS/admin.js"
click node_admin_api "https://github.com/ryuka2006/optical-store/tree/main/Admin/Api"
click node_admin_crud "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/crud.php"
click node_admin_users "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/users.php"
click node_admin_exams "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/examinations.php"
click node_admin_orders "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/sale_order.php"
click node_cashier_ui "https://github.com/ryuka2006/optical-store/blob/main/Cashier/js/cashier.js"
click node_cashier_workspace "https://github.com/ryuka2006/optical-store/blob/main/Cashier/api/workspace.php"
click node_cashier_transactions "https://github.com/ryuka2006/optical-store/tree/main/Cashier/api"
click node_sales_ui "https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/JS/salestaff.js"
click node_sales_workspace "https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/workspace.php"
click node_sales_products "https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/products.php"
click node_optom_ui "https://github.com/ryuka2006/optical-store/blob/main/Optometrist/JS/index.js"
click node_clinical_api "https://github.com/ryuka2006/optical-store/tree/main/Optometrist/Api"
click node_clinical_dashboard "https://github.com/ryuka2006/optical-store/blob/main/Optometrist/Api/dashboard.php"
click node_security "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/guard.php"
click node_admin_db "https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/database.php"
click node_cashier_db "https://github.com/ryuka2006/optical-store/blob/main/Cashier/api/database.php"
click node_sales_db "https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/database.php"
click node_clinical_db "https://github.com/ryuka2006/optical-store/blob/main/Optometrist/Api/database.php"

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_admin_ui,node_admin_api,node_admin_crud,node_admin_users,node_admin_exams,node_admin_orders toneBlue
class node_cashier_ui,node_cashier_workspace,node_cashier_transactions,node_sales_ui,node_sales_workspace,node_sales_products toneAmber
class node_optom_ui,node_clinical_api,node_clinical_dashboard toneMint
class node_security,node_admin_db,node_cashier_db,node_sales_db,node_clinical_db toneRose
class node_admin_actor,node_cashier_actor,node_sales_actor,node_optom_actor toneIndigo
```

## Components

### Administration

- [Admin Interface](https://github.com/ryuka2006/optical-store/blob/main/Admin/JS/admin.js): `Admin/JS/admin.js`
- [Admin APIs](https://github.com/ryuka2006/optical-store/tree/main/Admin/Api): `Admin/Api`
- [Generic CRUD](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/crud.php): `Admin/Api/crud.php`
- [User Management](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/users.php): `Admin/Api/users.php`
- [Examinations](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/examinations.php): `Admin/Api/examinations.php`
- [Sales Orders](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/sale_order.php): `Admin/Api/sale_order.php`

### Sales Workspaces

- [Cashier Interface](https://github.com/ryuka2006/optical-store/blob/main/Cashier/js/cashier.js): `Cashier/js/cashier.js`
- [Cashier Workspace](https://github.com/ryuka2006/optical-store/blob/main/Cashier/api/workspace.php): `Cashier/api/workspace.php`
- [Cashier Transactions](https://github.com/ryuka2006/optical-store/tree/main/Cashier/api): `Cashier/api`
- [Sales Interface](https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/JS/salestaff.js): `Sale-Staff/JS/salestaff.js`
- [Sales Workspace](https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/workspace.php): `Sale-Staff/API/workspace.php`
- [Product Management](https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/products.php): `Sale-Staff/API/products.php`

### Clinical Workspace

- [Optometrist Interface](https://github.com/ryuka2006/optical-store/blob/main/Optometrist/JS/index.js): `Optometrist/JS/index.js`
- [Clinical APIs](https://github.com/ryuka2006/optical-store/tree/main/Optometrist/Api): `Optometrist/Api`
- [Clinical Dashboard](https://github.com/ryuka2006/optical-store/blob/main/Optometrist/Api/dashboard.php): `Optometrist/Api/dashboard.php`

### Shared Services

- [API Security](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/guard.php): `Admin/Api/guard.php`
- [Database Connection](https://github.com/ryuka2006/optical-store/blob/main/Admin/Api/database.php): `Admin/Api/database.php`
- [Cashier Data Access](https://github.com/ryuka2006/optical-store/blob/main/Cashier/api/database.php): `Cashier/api/database.php`
- [Sales Data Access](https://github.com/ryuka2006/optical-store/blob/main/Sale-Staff/API/database.php): `Sale-Staff/API/database.php`
- [Clinical Data Access](https://github.com/ryuka2006/optical-store/blob/main/Optometrist/Api/database.php): `Optometrist/Api/database.php`

### Other components

- **Administrator**
- **Cashier**
- **Sales Staff**
- **Optometrist**

## Connections

- Generic CRUD → API Security: requires security (evidence: `Admin/Api/crud.php`)
- User Management → API Security: checks access (evidence: `Admin/Api/users.php`)
- User Management → Database Connection: queries (evidence: `Admin/Api/users.php`)
- Examinations → API Security: checks access (evidence: `Admin/Api/examinations.php`)
- Examinations → Database Connection: queries (evidence: `Admin/Api/examinations.php`)
- Sales Orders → API Security: checks access (evidence: `Admin/Api/sale_order.php`)
- Sales Orders → Database Connection: queries (evidence: `Admin/Api/sale_order.php`)
- Cashier Workspace → Cashier Data Access: includes access (evidence: `Cashier/api/workspace.php`)
- Cashier Workspace → Database Connection: writes transactions (evidence: `Cashier/api/workspace.php`)
- Cashier Data Access → API Security: requires security (evidence: `Cashier/api/database.php`)
- Cashier Data Access → Database Connection: loads connection (evidence: `Cashier/api/database.php`)
- Cashier Transactions → Cashier Data Access: uses access (evidence: `Cashier/api/payment.php`)
- Sales Workspace → Sales Data Access: includes access (evidence: `Sale-Staff/API/workspace.php`)
- Sales Workspace → Database Connection: updates sales data (evidence: `Sale-Staff/API/workspace.php`)
- Product Management → Sales Data Access: uses access (evidence: `Sale-Staff/API/products.php`)
- Sales Data Access → API Security: requires security (evidence: `Sale-Staff/API/database.php`)
- Sales Data Access → Database Connection: loads connection (evidence: `Sale-Staff/API/database.php`)
- Clinical APIs → Clinical Data Access: uses access (evidence: `Optometrist/Api/dashboard.php`)
- Clinical Data Access → API Security: requires security (evidence: `Optometrist/Api/database.php`)
- Clinical Data Access → Database Connection: loads connection (evidence: `Optometrist/Api/database.php`)
