# chiranat/pos-system architecture

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

- Interactive diagram: https://gitdiagram.com/chiranat/pos-system
- Repository: https://github.com/chiranat/pos-system

## Overview

This restaurant POS supports QR-based customer ordering, staff table/session operations, kitchen order handling, and admin menu, staff, sales, and transaction workflows. The main path is opening a table to create a tokenized session and QR, ordering against that session, kitchen status updates, then payment and session closure; reporting summarizes completed transactions. The README documents WebSocket kitchen updates and PDF export, but sampled source does not show their implementation or wiring, so those links are left unverified. Frontend-to-API relationships are documented only where visible in sampled files.

Main entry points: [`backend/src/main/java/com/chiranat/pos/PosApplication.java`](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/PosApplication.java) (POS API), [`frontend/src/router/index.js`](https://github.com/chiranat/pos-system/blob/main/frontend/src/router/index.js) (Role Routes), [`backend/src/main/java/com/chiranat/pos/repository/OrderRepository.java`](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/repository/OrderRepository.java) (Order Store), [`backend/src/main/java/com/chiranat/pos/service/TableService.java`](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/TableService.java) (Table Sessions & QR)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["POS Web App"]
  node_web["Vue Application<br/>[App.vue]"]
  node_routes["Role Routes<br/>[index.js]"]
  node_authstore["Auth Store<br/>[auth.js]"]
  node_customerui["Customer Menu"]
  node_staffui["Table Console<br/>[HomeView.vue]"]
  node_kitchenui["Kitchen Display<br/>[KitchenView.vue]"]
  node_adminui["Admin Views<br/>[DashboardView.vue]"]
end

subgraph group_identity["Identity &amp; Access"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_users["Staff Management<br/>[UserService.java]"]
  node_userapi["Staff Endpoints"]
end

subgraph group_service["Restaurant Operations"]
  node_backend["POS API"]
  node_tables["Table Sessions &amp; QR<br/>[TableService.java]"]
  node_tableapi["Table Endpoints"]
  node_orders["Order Handling<br/>[OrderService.java]"]
  node_kitchen["Kitchen Workflow"]
  node_payments["Payments &amp; Receipts"]
  node_sessions[("Dining Session Store")]
  node_ordersdb[("Order Store")]
end

subgraph group_catalog["Menu &amp; Media"]
  node_menu["Menu Management<br/>[MenuService.java]"]
  node_uploads["Image Storage"]
  node_fileapi["Upload Endpoint"]
  node_adminmenu["Menu Endpoints"]
end

subgraph group_insights["Sales &amp; Records"]
  node_reporting["Sales Reporting<br/>[ReportService.java]"]
  node_database[("POS Database<br/>[DiningSession.java]")]
  node_reportapi["Report Endpoints"]
end

node_customer(("Customer"))
node_staff(("Restaurant Staff"))

node_customer -.->|"uses"| node_web
node_staff -.->|"uses"| node_web
node_web -->|"mounts"| node_routes
node_routes -->|"checks access"| node_authstore
node_routes -->|"routes to"| node_customerui
node_routes -->|"routes to"| node_staffui
node_routes -->|"routes to"| node_kitchenui
node_routes -->|"routes to"| node_adminui
node_authstore -->|"HTTP auth"| node_backend
node_backend -.->|"dispatches auth"| node_auth
node_backend -.->|"routes requests"| node_tableapi
node_tableapi -->|"calls"| node_tables
node_tables -->|"reads/writes"| node_sessions
node_tables -->|"reads orders"| node_ordersdb
node_tables -->|"persists session"| node_database
node_customerui -.->|"orders via API"| node_backend
node_backend -.->|"dispatches orders"| node_orders
node_orders -->|"loads session"| node_sessions
node_orders -->|"persists orders"| node_ordersdb
node_kitchenui -.->|"requests updates"| node_backend
node_backend -.->|"dispatches kitchen"| node_kitchen
node_kitchen -.->|"updates status"| node_ordersdb
node_staffui -.->|"HTTP table actions"| node_tableapi
node_backend -.->|"dispatches payment"| node_payments
node_payments -->|"reads/closes session"| node_sessions
node_payments -->|"reads orders"| node_ordersdb
node_payments -.->|"records transaction"| node_database
node_backend -.->|"routes menu"| node_adminmenu
node_adminmenu -->|"calls"| node_menu
node_backend -.->|"routes uploads"| node_fileapi
node_fileapi -->|"stores files"| node_uploads
node_backend -.->|"routes staff"| node_userapi
node_userapi -->|"calls"| node_users
node_backend -.->|"routes reports"| node_reportapi
node_reportapi -.->|"dispatches reports"| node_reporting
node_adminui -.->|"requests reports"| node_backend
node_reporting -->|"queries orders"| node_ordersdb
node_reporting -.->|"aggregates transactions"| node_database

click node_web "https://github.com/chiranat/pos-system/blob/main/frontend/src/App.vue"
click node_routes "https://github.com/chiranat/pos-system/blob/main/frontend/src/router/index.js"
click node_authstore "https://github.com/chiranat/pos-system/blob/main/frontend/src/stores/auth.js"
click node_customerui "https://github.com/chiranat/pos-system/blob/main/frontend/src/views/CustomerMenuView.vue"
click node_staffui "https://github.com/chiranat/pos-system/blob/main/frontend/src/views/HomeView.vue"
click node_kitchenui "https://github.com/chiranat/pos-system/blob/main/frontend/src/views/KitchenView.vue"
click node_adminui "https://github.com/chiranat/pos-system/blob/main/frontend/src/views/DashboardView.vue"
click node_backend "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/PosApplication.java"
click node_auth "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/AuthService.java"
click node_tables "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/TableService.java"
click node_tableapi "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/TableController.java"
click node_orders "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/OrderService.java"
click node_kitchen "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/KitchenController.java"
click node_payments "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/TransactionService.java"
click node_menu "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/MenuService.java"
click node_uploads "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/FileStorageService.java"
click node_reporting "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/ReportService.java"
click node_users "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/UserService.java"
click node_sessions "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/repository/DiningSessionRepository.java"
click node_ordersdb "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/repository/OrderRepository.java"
click node_database "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/model/DiningSession.java"
click node_fileapi "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/FileUploadController.java"
click node_adminmenu "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/AdminMenuController.java"
click node_userapi "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/UserController.java"
click node_reportapi "https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/ReportController.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_web,node_routes,node_authstore,node_customerui,node_staffui,node_kitchenui,node_adminui toneBlue
class node_auth,node_users,node_userapi toneAmber
class node_backend,node_tables,node_tableapi,node_orders,node_kitchen,node_payments,node_sessions,node_ordersdb toneMint
class node_menu,node_uploads,node_fileapi,node_adminmenu toneRose
class node_reporting,node_database,node_reportapi,node_customer,node_staff toneIndigo
```

## Components

### POS Web App

- [Vue Application](https://github.com/chiranat/pos-system/blob/main/frontend/src/App.vue): `frontend/src/App.vue`
- [Role Routes](https://github.com/chiranat/pos-system/blob/main/frontend/src/router/index.js): `frontend/src/router/index.js`
- [Auth Store](https://github.com/chiranat/pos-system/blob/main/frontend/src/stores/auth.js): `frontend/src/stores/auth.js`
- [Customer Menu](https://github.com/chiranat/pos-system/blob/main/frontend/src/views/CustomerMenuView.vue): `frontend/src/views/CustomerMenuView.vue`
- [Table Console](https://github.com/chiranat/pos-system/blob/main/frontend/src/views/HomeView.vue): `frontend/src/views/HomeView.vue`
- [Kitchen Display](https://github.com/chiranat/pos-system/blob/main/frontend/src/views/KitchenView.vue): `frontend/src/views/KitchenView.vue`
- [Admin Views](https://github.com/chiranat/pos-system/blob/main/frontend/src/views/DashboardView.vue): `frontend/src/views/DashboardView.vue`

### Identity & Access

- [Authentication](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/AuthService.java): `backend/src/main/java/com/chiranat/pos/service/AuthService.java`
- [Staff Management](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/UserService.java): `backend/src/main/java/com/chiranat/pos/service/UserService.java`
- [Staff Endpoints](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/UserController.java): `backend/src/main/java/com/chiranat/pos/controller/UserController.java`

### Restaurant Operations

- [POS API](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/PosApplication.java): `backend/src/main/java/com/chiranat/pos/PosApplication.java`
- [Table Sessions & QR](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/TableService.java): `backend/src/main/java/com/chiranat/pos/service/TableService.java`
- [Table Endpoints](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/TableController.java): `backend/src/main/java/com/chiranat/pos/controller/TableController.java`
- [Order Handling](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/OrderService.java): `backend/src/main/java/com/chiranat/pos/service/OrderService.java`
- [Kitchen Workflow](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/KitchenController.java): `backend/src/main/java/com/chiranat/pos/controller/KitchenController.java`
- [Payments & Receipts](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/TransactionService.java): `backend/src/main/java/com/chiranat/pos/service/TransactionService.java`
- [Dining Session Store](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/repository/DiningSessionRepository.java): `backend/src/main/java/com/chiranat/pos/repository/DiningSessionRepository.java`
- [Order Store](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/repository/OrderRepository.java): `backend/src/main/java/com/chiranat/pos/repository/OrderRepository.java`

### Menu & Media

- [Menu Management](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/MenuService.java): `backend/src/main/java/com/chiranat/pos/service/MenuService.java`
- [Image Storage](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/FileStorageService.java): `backend/src/main/java/com/chiranat/pos/service/FileStorageService.java`
- [Upload Endpoint](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/FileUploadController.java): `backend/src/main/java/com/chiranat/pos/controller/FileUploadController.java`
- [Menu Endpoints](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/AdminMenuController.java): `backend/src/main/java/com/chiranat/pos/controller/AdminMenuController.java`

### Sales & Records

- [Sales Reporting](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/service/ReportService.java): `backend/src/main/java/com/chiranat/pos/service/ReportService.java`
- [POS Database](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/model/DiningSession.java): `backend/src/main/java/com/chiranat/pos/model/DiningSession.java`
- [Report Endpoints](https://github.com/chiranat/pos-system/blob/main/backend/src/main/java/com/chiranat/pos/controller/ReportController.java): `backend/src/main/java/com/chiranat/pos/controller/ReportController.java`

### Other components

- **Customer**
- **Restaurant Staff**

## Connections

- Customer → Vue Application: uses
- Restaurant Staff → Vue Application: uses
- Vue Application → Role Routes: mounts (evidence: `frontend/src/main.js`)
- Role Routes → Auth Store: checks access (evidence: `frontend/src/router/index.js`)
- Role Routes → Customer Menu: routes to (evidence: `frontend/src/router/index.js`)
- Role Routes → Table Console: routes to (evidence: `frontend/src/router/index.js`)
- Role Routes → Kitchen Display: routes to (evidence: `frontend/src/router/index.js`)
- Role Routes → Admin Views: routes to (evidence: `frontend/src/router/index.js`)
- Auth Store → POS API: HTTP auth (evidence: `frontend/src/stores/auth.js`)
- POS API → Authentication: dispatches auth
- POS API → Table Endpoints: routes requests
- Table Endpoints → Table Sessions & QR: calls (evidence: `backend/src/main/java/com/chiranat/pos/controller/TableController.java`)
- Table Sessions & QR → Dining Session Store: reads/writes (evidence: `backend/src/main/java/com/chiranat/pos/service/TableService.java`)
- Table Sessions & QR → Order Store: reads orders (evidence: `backend/src/main/java/com/chiranat/pos/service/TableService.java`)
- Table Sessions & QR → POS Database: persists session (evidence: `backend/src/main/java/com/chiranat/pos/model/DiningSession.java`)
- Customer Menu → POS API: orders via API
- POS API → Order Handling: dispatches orders
- Order Handling → Dining Session Store: loads session (evidence: `backend/src/main/java/com/chiranat/pos/service/OrderService.java`)
- Order Handling → Order Store: persists orders (evidence: `backend/src/main/java/com/chiranat/pos/service/OrderService.java`)
- Kitchen Display → POS API: requests updates
- POS API → Kitchen Workflow: dispatches kitchen
- Kitchen Workflow → Order Store: updates status
- Table Console → Table Endpoints: HTTP table actions
- POS API → Payments & Receipts: dispatches payment
- Payments & Receipts → Dining Session Store: reads/closes session (evidence: `backend/src/main/java/com/chiranat/pos/service/TransactionService.java`)
- Payments & Receipts → Order Store: reads orders (evidence: `backend/src/main/java/com/chiranat/pos/service/TransactionService.java`)
- Payments & Receipts → POS Database: records transaction (evidence: `backend/src/main/java/com/chiranat/pos/service/TransactionService.java`)
- POS API → Menu Endpoints: routes menu
- Menu Endpoints → Menu Management: calls (evidence: `backend/src/main/java/com/chiranat/pos/controller/AdminMenuController.java`)
- POS API → Upload Endpoint: routes uploads
- Upload Endpoint → Image Storage: stores files (evidence: `backend/src/main/java/com/chiranat/pos/controller/FileUploadController.java`)
- POS API → Staff Endpoints: routes staff
- Staff Endpoints → Staff Management: calls (evidence: `backend/src/main/java/com/chiranat/pos/controller/UserController.java`)
- POS API → Report Endpoints: routes reports
- Report Endpoints → Sales Reporting: dispatches reports
- Admin Views → POS API: requests reports
- Sales Reporting → Order Store: queries orders (evidence: `backend/src/main/java/com/chiranat/pos/service/ReportService.java`)
- Sales Reporting → POS Database: aggregates transactions (evidence: `backend/src/main/java/com/chiranat/pos/service/ReportService.java`)
