# alfredlim16/restaurant-management-system architecture

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

- Interactive diagram: https://gitdiagram.com/alfredlim16/restaurant-management-system
- Repository: https://github.com/alfredlim16/restaurant-management-system

## Overview

1. This is a Java desktop application for restaurant operations, not a web service. The main runtime is a Swing UI, with role-based entry points for login, cashier work, and manager/admin work.

2. The top-level launch path appears to be `restaurantmanagementsystem/RestaurantManagementSystem.java`, which likely boots the app and opens the login screen. From there, access is routed by role into `user/LoginFrame`, `cashier/CashierFrame`, or `manager/ManagerFrame`.

3. The architecture is split into three major functional areas:
   - `user`: authentication, authorization, database connection, and shared exception types
   - `cashier`: order taking, payment processing, and receipt generation
   - `manager`: inventory, menu ingredients, food waste, reports, and user management

4. The `user` package is the shared infrastructure layer. It contains `DatabaseConnection`, `AuthenticationService`, `PermissionService`, `AbstractAppService`, user/domain objects, and interfaces such as `IAuthentication`, `IPermission`, and `IUser`. This layer enforces access control and provides the database access foundation used by the other modules.

5. The cashier subsystem centers on customer transaction flow. `OrdersPanel` and `PaymentsPanel` are the UI surfaces, while `OrderService` and `PaymentService` handle the business logic. Domain objects like `Order`, `OrderItem`, `MenuItem`, and `Payment` are paired with persistence mappers prefixed with `Db*` such as `DbOrder`, `DbPayment`, and `DbMenuItem`.

6. Cashier data flow is likely: select menu items -> build an `Order` -> validate status and inventory rules -> create a `Payment` using a `PaymentMethod` -> update `OrderStatus` and `PaymentStatus` -> display or print a receipt via `ReceiptDialog`. Failures are surfaced through business exceptions such as `PaymentFailedException` and `InsufficientInventoryException`.

7. The manager subsystem supports operational control and reporting. `InventoryPanel`, `MenuItemPanel`, `FoodWastePanel`, `ReportsPanel`, and `UserManagementPanel` are the primary screens. Services such as `InventoryService`, `MenuItemService`, `FoodWasteService`, `ReportService`, and `UserManagementService` implement the domain workflows behind those screens.

8. Manager data is structured around inventory and menu composition. `InventoryItem`, `MenuItemIngredient`, and `FoodWaste` represent the core entities, with corresponding DB-backed classes like `DbInventoryItem`, `DbMenuItemIngredient`, and `DbFoodWaste`. The presence of `IngredientDialog` and `DatePickerDialog` suggests interactive data-entry and filtering for operational updates and reporting.

9. Reports are likely derived from persisted transactional and operational data, not computed entirely in memory. `ReportService` probably aggregates orders/payments, inventory changes, and food waste into manager-facing summaries shown in `ReportsPanel` and `DashboardPanel`.

10. The `Db*` classes form the persistence boundary. They appear to be row-mapped representations of the domain objects used by the services, separating UI/business models from database-facing structures. The actual schema is defined in `src/main/resources/sql file/database.sql`.

11. Interfaces such as `IMenuItem`, `IOrder`, `IPayment`, `IInventoryItem`, `IFoodWaste`, and `IMenuItemIngredient` indicate the code uses explicit contracts for core entities. This suggests the system is organized around service-driven business logic with domain abstractions, rather than direct UI-to-database access.

12. Cross-cutting validation and error handling are first-class parts of the design. `ValidationException`, `BusinessException`, `PaymentFailedException`, and `InsufficientInventoryException` indicate that domain rules are enforced in the service layer and propagated back to the Swing UI for user feedback.

13. Resource folders for `icons` and `images` show the UI is polished and likely heavily desktop-oriented. The architecture is therefore best drawn as a client-side desktop application with local UI, service, and persistence layers, rather than a distributed microservice system.

14. For an architecture diagram, the clearest boundaries are:
   - Presentation: Swing frames, panels, dialogs
   - Application/domain services: auth, cashier, manager services
   - Persistence: DB-mapped entities and database connection
   - Shared infrastructure: user/auth/permission, exceptions, and role model
   - External dependency: relational database defined by the bundled SQL schema

Main entry points: [`src/main/java/user/DatabaseConnection.java`](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/DatabaseConnection.java) (Database), [`src/main/java/manager/ManagerFrame.java`](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ManagerFrame.java) (Manager), [`src/main/java/cashier/PaymentService.java`](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/PaymentService.java) (Payment service), [`src/main/java/user/LoginFrame.java`](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/LoginFrame.java) (Login)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentation"]
  node_launcher["App launch<br/>bootstrap"]
  node_login["Login<br/>auth UI<br/>[LoginFrame.java]"]
  node_cashier_frame["Cashier<br/>role frame<br/>[CashierFrame.java]"]
  node_manager_frame["Manager<br/>role frame<br/>[ManagerFrame.java]"]
  node_orders_panel["Orders<br/>cashier UI<br/>[OrdersPanel.java]"]
  node_payments_panel["Payments<br/>cashier UI<br/>[PaymentsPanel.java]"]
  node_receipt_dialog["Receipt<br/>cashier dialog<br/>[ReceiptDialog.java]"]
  node_dashboard_panel["Dashboard<br/>manager UI"]
  node_inventory_panel["Inventory<br/>manager UI"]
  node_menu_panel["Menu items<br/>manager UI<br/>[MenuItemPanel.java]"]
  node_waste_panel["Food waste<br/>manager UI"]
  node_reports_panel["Reports<br/>manager UI<br/>[ReportsPanel.java]"]
  node_users_panel["Users<br/>manager UI"]
  node_ingredient_dialog["Ingredient dialog<br/>manager dialog"]
  node_date_picker["Date picker<br/>manager dialog"]
end

subgraph group_application["Application"]
  node_auth_service["Auth service<br/>authentication"]
  node_perm_service["Permission service<br/>authorization"]
  node_order_service["Order service<br/>cashier service<br/>[OrderService.java]"]
  node_payment_service["Payment service<br/>cashier service"]
  node_inventory_service["Inventory service<br/>manager service"]
  node_menu_service["Menu service<br/>manager service"]
  node_waste_service["Waste service<br/>manager service"]
  node_report_service["Report service<br/>analytics service<br/>[ReportService.java]"]
  node_user_service["User service<br/>admin service"]
  node_order_model["Order<br/>cashier domain<br/>[Order.java]"]
  node_payment_model["Payment<br/>cashier domain<br/>[Payment.java]"]
  node_inventory_model["Inventory item<br/>manager domain<br/>[InventoryItem.java]"]
  node_menu_ing_model["Menu ingredient<br/>manager domain"]
  node_waste_model["Food waste<br/>manager domain<br/>[FoodWaste.java]"]
end

subgraph group_persistence["Persistence"]
  node_database_connection[("Database<br/>jdbc connection")]
  node_db_user["Db user<br/>row model<br/>[DbUser.java]"]
  node_db_order["Db order<br/>row model<br/>[DbOrder.java]"]
  node_db_payment["Db payment<br/>row model<br/>[DbPayment.java]"]
  node_db_menu_item["Db menu item<br/>row model<br/>[DbMenuItem.java]"]
end

node_launcher -->|"opens"| node_login
node_login -->|"authenticates"| node_auth_service
node_auth_service -->|"resolves role"| node_perm_service
node_login -->|"cashier access"| node_cashier_frame
node_login -->|"manager access"| node_manager_frame
node_cashier_frame -->|"contains"| node_orders_panel
node_cashier_frame -->|"contains"| node_payments_panel
node_cashier_frame -->|"shows"| node_receipt_dialog
node_orders_panel -->|"uses"| node_order_service
node_payments_panel -->|"uses"| node_payment_service
node_order_service -->|"builds"| node_order_model
node_order_service -->|"persists"| node_db_order
node_payment_service -->|"creates"| node_payment_model
node_payment_service -->|"persists"| node_db_payment
node_payment_service -->|"prints receipt"| node_receipt_dialog
node_manager_frame -->|"contains"| node_dashboard_panel
node_manager_frame -->|"contains"| node_inventory_panel
node_manager_frame -->|"contains"| node_menu_panel
node_manager_frame -->|"contains"| node_waste_panel
node_manager_frame -->|"contains"| node_reports_panel
node_manager_frame -->|"contains"| node_users_panel
node_inventory_panel -->|"uses"| node_inventory_service
node_menu_panel -->|"uses"| node_menu_service
node_waste_panel -->|"uses"| node_waste_service
node_reports_panel -->|"uses"| node_report_service
node_users_panel -->|"uses"| node_user_service
node_menu_panel -->|"edits"| node_ingredient_dialog
node_reports_panel -->|"filters"| node_date_picker
node_inventory_service -->|"manages"| node_inventory_model
node_menu_service -->|"manages"| node_menu_ing_model
node_waste_service -->|"records"| node_waste_model
node_auth_service -->|"queries"| node_database_connection
node_order_service -->|"queries"| node_database_connection
node_payment_service -->|"queries"| node_database_connection
node_inventory_service -->|"queries"| node_database_connection
node_menu_service -->|"queries"| node_database_connection
node_waste_service -->|"queries"| node_database_connection
node_report_service -->|"aggregates"| node_database_connection
node_user_service -->|"queries"| node_database_connection
node_database_connection -->|"maps"| node_db_user
node_database_connection -->|"maps"| node_db_menu_item
node_database_connection -->|"maps"| node_db_order
node_database_connection -->|"maps"| node_db_payment

click node_launcher "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/restaurantmanagementsystem/RestaurantManagementSystem.java"
click node_login "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/LoginFrame.java"
click node_cashier_frame "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/CashierFrame.java"
click node_manager_frame "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ManagerFrame.java"
click node_orders_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/OrdersPanel.java"
click node_payments_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/PaymentsPanel.java"
click node_receipt_dialog "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/ReceiptDialog.java"
click node_dashboard_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/DashboardPanel.java"
click node_inventory_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryPanel.java"
click node_menu_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemPanel.java"
click node_waste_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWastePanel.java"
click node_reports_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ReportsPanel.java"
click node_users_panel "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/UserManagementPanel.java"
click node_ingredient_dialog "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/IngredientDialog.java"
click node_date_picker "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/DatePickerDialog.java"
click node_auth_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/AuthenticationService.java"
click node_perm_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/PermissionService.java"
click node_order_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/OrderService.java"
click node_payment_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/PaymentService.java"
click node_inventory_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryService.java"
click node_menu_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemService.java"
click node_waste_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWasteService.java"
click node_report_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ReportService.java"
click node_user_service "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/UserManagementService.java"
click node_order_model "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/Order.java"
click node_payment_model "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/Payment.java"
click node_inventory_model "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryItem.java"
click node_menu_ing_model "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemIngredient.java"
click node_waste_model "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWaste.java"
click node_database_connection "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/DatabaseConnection.java"
click node_db_user "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/DbUser.java"
click node_db_order "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbOrder.java"
click node_db_payment "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbPayment.java"
click node_db_menu_item "https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbMenuItem.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_launcher,node_login,node_cashier_frame,node_manager_frame,node_orders_panel,node_payments_panel,node_receipt_dialog,node_dashboard_panel,node_inventory_panel,node_menu_panel,node_waste_panel,node_reports_panel,node_users_panel,node_ingredient_dialog,node_date_picker toneBlue
class node_auth_service,node_perm_service,node_order_service,node_payment_service,node_inventory_service,node_menu_service,node_waste_service,node_report_service,node_user_service,node_order_model,node_payment_model,node_inventory_model,node_menu_ing_model,node_waste_model toneAmber
class node_database_connection,node_db_user,node_db_order,node_db_payment,node_db_menu_item toneMint
```

## Components

### Presentation

Swing launchers, role frames, screens, and dialogs

- [App launch](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/restaurantmanagementsystem/RestaurantManagementSystem.java): bootstrap · Main entry point that starts the desktop application · `src/main/java/restaurantmanagementsystem/RestaurantManagementSystem.java`
- [Login](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/LoginFrame.java): auth UI · Shared login screen that routes users by role · `src/main/java/user/LoginFrame.java`
- [Cashier](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/CashierFrame.java): role frame · Cashier workspace shell · `src/main/java/cashier/CashierFrame.java`
- [Manager](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ManagerFrame.java): role frame · Manager/admin workspace shell · `src/main/java/manager/ManagerFrame.java`
- [Orders](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/OrdersPanel.java): cashier UI · Order entry and item selection screen · `src/main/java/cashier/OrdersPanel.java`
- [Payments](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/PaymentsPanel.java): cashier UI · Payment capture and completion screen · `src/main/java/cashier/PaymentsPanel.java`
- [Receipt](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/ReceiptDialog.java): cashier dialog · Receipt display or print dialog · `src/main/java/cashier/ReceiptDialog.java`
- [Dashboard](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/DashboardPanel.java): manager UI · Manager landing and summary screen · `src/main/java/manager/DashboardPanel.java`
- [Inventory](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryPanel.java): manager UI · Inventory maintenance screen · `src/main/java/manager/InventoryPanel.java`
- [Menu items](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemPanel.java): manager UI · Menu composition and item management screen · `src/main/java/manager/MenuItemPanel.java`
- [Food waste](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWastePanel.java): manager UI · Waste tracking screen · `src/main/java/manager/FoodWastePanel.java`
- [Reports](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ReportsPanel.java): manager UI · Operational reporting screen · `src/main/java/manager/ReportsPanel.java`
- [Users](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/UserManagementPanel.java): manager UI · User administration screen · `src/main/java/manager/UserManagementPanel.java`
- [Ingredient dialog](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/IngredientDialog.java): manager dialog · Dialog for editing menu ingredients · `src/main/java/manager/IngredientDialog.java`
- [Date picker](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/DatePickerDialog.java): manager dialog · Dialog for date selection and filtering · `src/main/java/manager/DatePickerDialog.java`

### Application

Authentication, cashier, and manager services plus core domain objects

- [Auth service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/AuthenticationService.java): authentication · Validates credentials and establishes role-based access · `src/main/java/user/AuthenticationService.java`
- [Permission service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/PermissionService.java): authorization · Resolves and enforces permissions by role · `src/main/java/user/PermissionService.java`
- [Order service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/OrderService.java): cashier service · Builds and validates orders · `src/main/java/cashier/OrderService.java`
- [Payment service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/PaymentService.java): cashier service · Processes payments and finalizes sales · `src/main/java/cashier/PaymentService.java`
- [Inventory service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryService.java): manager service · Maintains inventory state and rules · `src/main/java/manager/InventoryService.java`
- [Menu service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemService.java): manager service · Manages menu items and ingredient links · `src/main/java/manager/MenuItemService.java`
- [Waste service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWasteService.java): manager service · Records food waste transactions · `src/main/java/manager/FoodWasteService.java`
- [Report service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/ReportService.java): analytics service · Aggregates operational and financial data · `src/main/java/manager/ReportService.java`
- [User service](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/UserManagementService.java): admin service · Manages user administration workflows · `src/main/java/manager/UserManagementService.java`
- [Order](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/Order.java): cashier domain · Customer order aggregate · `src/main/java/cashier/Order.java`
- [Payment](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/Payment.java): cashier domain · Payment record and method details · `src/main/java/cashier/Payment.java`
- [Inventory item](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/InventoryItem.java): manager domain · Stock item and quantity state · `src/main/java/manager/InventoryItem.java`
- [Menu ingredient](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/MenuItemIngredient.java): manager domain · Links menu items to ingredients · `src/main/java/manager/MenuItemIngredient.java`
- [Food waste](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/manager/FoodWaste.java): manager domain · Waste entry and quantity tracking · `src/main/java/manager/FoodWaste.java`

### Persistence

Shared database access and DB-mapped records

- [Database](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/DatabaseConnection.java): jdbc connection · Shared database connection utility · `src/main/java/user/DatabaseConnection.java`
- [Db user](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/user/DbUser.java): row model · Database-facing user record · `src/main/java/user/DbUser.java`
- [Db order](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbOrder.java): row model · Database-facing order record · `src/main/java/cashier/DbOrder.java`
- [Db payment](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbPayment.java): row model · Database-facing payment record · `src/main/java/cashier/DbPayment.java`
- [Db menu item](https://github.com/alfredlim16/restaurant-management-system/blob/main/src/main/java/cashier/DbMenuItem.java): row model · Database-facing menu item record · `src/main/java/cashier/DbMenuItem.java`

## Connections

- App launch → Login: opens · Application startup shows the login screen
- Login → Auth service: authenticates · Login delegates credential checks to the authentication service
- Auth service → Permission service: resolves role · Authentication and authorization work together to route users
- Login → Cashier: cashier access · Cashier users enter the cashier workspace
- Login → Manager: manager access · Manager or admin users enter the management workspace
- Cashier → Orders: contains · Cashier workspace hosts order entry
- Cashier → Payments: contains · Cashier workspace hosts payment processing
- Cashier → Receipt: shows · Receipts are presented from the cashier flow
- Orders → Order service: uses · Order screen calls order business logic
- Payments → Payment service: uses · Payment screen calls payment business logic
- Order service → Order: builds · Order service creates and validates order aggregates
- Order service → Db order: persists · Orders are stored through DB-mapped records
- Payment service → Payment: creates · Payment service creates payment records
- Payment service → Db payment: persists · Payments are stored through DB-mapped records
- Payment service → Receipt: prints receipt · Completed payments can produce a receipt
- Manager → Dashboard: contains · Management workspace starts with the dashboard
- Manager → Inventory: contains · Management workspace hosts inventory control
- Manager → Menu items: contains · Management workspace hosts menu maintenance
- Manager → Food waste: contains · Management workspace hosts waste tracking
- Manager → Reports: contains · Management workspace hosts reporting
- Manager → Users: contains · Management workspace hosts user administration
- Inventory → Inventory service: uses · Inventory screen delegates to inventory workflows
- Menu items → Menu service: uses · Menu screen delegates to menu workflows
- Food waste → Waste service: uses · Waste screen delegates to waste workflows
- Reports → Report service: uses · Reports screen requests aggregated summaries
- Users → User service: uses · User administration delegates to user management service
- Menu items → Ingredient dialog: edits · Ingredient dialog supports menu composition editing
- Reports → Date picker: filters · Date picker supports report range selection
- Inventory service → Inventory item: manages · Inventory service operates on inventory items
- Menu service → Menu ingredient: manages · Menu service operates on ingredient links
- Waste service → Food waste: records · Waste service operates on waste entries
- Auth service → Database: queries · Authentication depends on the shared database connection
- Order service → Database: queries · Order workflow reads and writes through the database connection
- Payment service → Database: queries · Payment workflow reads and writes through the database connection
- Inventory service → Database: queries · Inventory workflow reads and writes through the database connection
- Menu service → Database: queries · Menu workflow reads and writes through the database connection
- Waste service → Database: queries · Waste workflow reads and writes through the database connection
- Report service → Database: aggregates · Reports are derived from persisted operational data
- User service → Database: queries · User management reads and writes through the database connection
- Database → Db user: maps · Connection supports user row access
- Database → Db menu item: maps · Connection supports menu item row access
- Database → Db order: maps · Connection supports order row access
- Database → Db payment: maps · Connection supports payment row access
