# ngocquy2610/restaurant_management architecture

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

- Interactive diagram: https://gitdiagram.com/ngocquy2610/restaurant_management
- Repository: https://github.com/ngocquy2610/restaurant_management

## Overview

This is a Rails restaurant operations application, spanning table layout and reservations through preorders, active dining orders, kitchen fulfillment, payments, and customer queues. The main workflow begins with a customer booking a table and optionally preordering; staff manage the booking and timed kitchen release, while kitchen staff advance order items and the restaurant records payment. Administration also configures menus and floor plans, and the app provides promotions, notifications, dashboards, and account access. The graph emphasizes documented routes and sampled controller ownership; unsampled subsystem wiring is intentionally limited.

Main entry points: [`app/models/order.rb`](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/order.rb) (Orders and items), [`app/controllers/reservations_controller.rb`](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/reservations_controller.rb) (Reservation flow), [`app/controllers/admin/reservations_controller.rb`](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/admin/reservations_controller.rb) (Reservation review), [`app/controllers/payments_controller.rb`](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/payments_controller.rb) (Payments and bills)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_booking["Booking and seating"]
  node_reservation_ui["Reservation flow"]
  node_reservation_admin["Reservation review"]
  node_reservations[("Reservations<br/>[reservation.rb]")]
  node_floor_tables["Floor tables"]
  node_table_records[("Tables and areas<br/>[table.rb]")]
  node_customer_queue["Walk-in queue"]
  node_queue_records[("Queue entries<br/>[customer_queue.rb]")]
end

subgraph group_orders["Orders and kitchen"]
  node_preorders["Preorders"]
  node_release_jobs["Timed release"]
  node_orders_ctrl["Order management"]
  node_order_records[("Orders and items<br/>[order.rb]")]
  node_kitchen["Kitchen queue"]
  node_payments["Payments and bills"]
  node_payment_records[("Payment records<br/>[payment.rb]")]
end

subgraph group_catalog["Catalog and layout"]
  node_catalog_ui["Menu management"]
  node_food_records[("Menu and recipes<br/>[food.rb]")]
  node_ingredients[("Ingredients<br/>[ingredient.rb]")]
  node_table_editor["Table layout editor"]
  node_canvas["Floor canvas"]
end

subgraph group_accounts["Accounts and insights"]
  node_auth["Sign-in"]
  node_users[("Users<br/>[user.rb]")]
  node_notifications["Notifications"]
  node_promotions["Promotions"]
  node_dashboard["Dashboard"]
end

node_customer(("Customer"))
node_staff(("Staff"))
node_stripe["Stripe"]

node_customer -->|"books table"| node_reservation_ui
node_reservation_ui -->|"creates and updates"| node_reservations
node_reservation_ui -->|"reads availability"| node_table_records
node_reservation_ui -->|"offers preorder"| node_preorders
node_staff -->|"reviews bookings"| node_reservation_admin
node_reservation_admin -->|"updates status/table"| node_reservations
node_reservation_admin -->|"reschedules release"| node_release_jobs
node_reservation_admin -->|"sends notice"| node_notifications
node_staff -->|"manages tables"| node_floor_tables
node_floor_tables -->|"reads and writes"| node_table_records
node_table_editor -->|"dispatches shape"| node_canvas
node_canvas -->|"edits geometry"| node_floor_tables
node_staff -->|"seats walk-ins"| node_customer_queue
node_customer_queue -->|"creates and seats"| node_queue_records
node_customer_queue -->|"creates dine-in order"| node_order_records
node_customer -->|"submits dishes"| node_preorders
node_preorders -->|"creates preorder"| node_order_records
node_release_jobs -->|"releases to kitchen"| node_order_records
node_customer -->|"places order"| node_orders_ctrl
node_orders_ctrl -->|"creates and updates"| node_order_records
node_staff -->|"fulfills orders"| node_kitchen
node_kitchen -->|"reads and updates items"| node_order_records
node_kitchen -->|"reads recipe quantities"| node_ingredients
node_customer -->|"pays bill"| node_payments
node_payments -->|"creates payment"| node_payment_records
node_payments -.->|"processes charge"| node_stripe
node_payments -->|"updates order totals"| node_order_records
node_staff -->|"maintains menu"| node_catalog_ui
node_catalog_ui -->|"manages catalog"| node_food_records
node_staff -->|"signs in"| node_auth
node_auth -->|"authenticates"| node_users
node_customer -->|"views notices"| node_notifications
node_customer -->|"browses offers"| node_promotions
node_staff -->|"reviews operations"| node_dashboard

click node_reservation_ui "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/reservations_controller.rb"
click node_reservation_admin "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/admin/reservations_controller.rb"
click node_reservations "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/reservation.rb"
click node_floor_tables "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/tables_controller.rb"
click node_table_records "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/table.rb"
click node_customer_queue "https://github.com/ngocquy2610/restaurant_management/blob/main/app/services/customer_queue_manager.rb"
click node_queue_records "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/customer_queue.rb"
click node_preorders "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/preorders_controller.rb"
click node_release_jobs "https://github.com/ngocquy2610/restaurant_management/blob/main/app/jobs/preorder_release_job.rb"
click node_orders_ctrl "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/orders_controller.rb"
click node_order_records "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/order.rb"
click node_kitchen "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/admin/kitchen_queues_controller.rb"
click node_payments "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/payments_controller.rb"
click node_payment_records "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/payment.rb"
click node_catalog_ui "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/menus_controller.rb"
click node_food_records "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/food.rb"
click node_ingredients "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/ingredient.rb"
click node_table_editor "https://github.com/ngocquy2610/restaurant_management/blob/main/app/javascript/controllers/table_wizard_controller.js"
click node_canvas "https://github.com/ngocquy2610/restaurant_management/blob/main/app/javascript/controllers/table_canvas_controller.js"
click node_auth "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/users/sessions_controller.rb"
click node_users "https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/user.rb"
click node_notifications "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/notifications_controller.rb"
click node_promotions "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/promotions_controller.rb"
click node_dashboard "https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/dashboards_controller.rb"

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_reservation_ui,node_reservation_admin,node_reservations,node_floor_tables,node_table_records,node_customer_queue,node_queue_records toneBlue
class node_preorders,node_release_jobs,node_orders_ctrl,node_order_records,node_kitchen,node_payments,node_payment_records toneAmber
class node_catalog_ui,node_food_records,node_ingredients,node_table_editor,node_canvas toneMint
class node_auth,node_users,node_notifications,node_promotions,node_dashboard toneRose
class node_customer,node_staff,node_stripe toneIndigo
```

## Components

### Booking and seating

- [Reservation flow](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/reservations_controller.rb): `app/controllers/reservations_controller.rb`
- [Reservation review](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/admin/reservations_controller.rb): `app/controllers/admin/reservations_controller.rb`
- [Reservations](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/reservation.rb): `app/models/reservation.rb`
- [Floor tables](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/tables_controller.rb): `app/controllers/tables_controller.rb`
- [Tables and areas](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/table.rb): `app/models/table.rb`
- [Walk-in queue](https://github.com/ngocquy2610/restaurant_management/blob/main/app/services/customer_queue_manager.rb): `app/services/customer_queue_manager.rb`
- [Queue entries](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/customer_queue.rb): `app/models/customer_queue.rb`

### Orders and kitchen

- [Preorders](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/preorders_controller.rb): `app/controllers/preorders_controller.rb`
- [Timed release](https://github.com/ngocquy2610/restaurant_management/blob/main/app/jobs/preorder_release_job.rb): `app/jobs/preorder_release_job.rb`
- [Order management](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/orders_controller.rb): `app/controllers/orders_controller.rb`
- [Orders and items](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/order.rb): `app/models/order.rb`
- [Kitchen queue](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/admin/kitchen_queues_controller.rb): `app/controllers/admin/kitchen_queues_controller.rb`
- [Payments and bills](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/payments_controller.rb): `app/controllers/payments_controller.rb`
- [Payment records](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/payment.rb): `app/models/payment.rb`

### Catalog and layout

- [Menu management](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/menus_controller.rb): `app/controllers/menus_controller.rb`
- [Menu and recipes](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/food.rb): `app/models/food.rb`
- [Ingredients](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/ingredient.rb): `app/models/ingredient.rb`
- [Table layout editor](https://github.com/ngocquy2610/restaurant_management/blob/main/app/javascript/controllers/table_wizard_controller.js): `app/javascript/controllers/table_wizard_controller.js`
- [Floor canvas](https://github.com/ngocquy2610/restaurant_management/blob/main/app/javascript/controllers/table_canvas_controller.js): `app/javascript/controllers/table_canvas_controller.js`

### Accounts and insights

- [Sign-in](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/users/sessions_controller.rb): `app/controllers/users/sessions_controller.rb`
- [Users](https://github.com/ngocquy2610/restaurant_management/blob/main/app/models/user.rb): `app/models/user.rb`
- [Notifications](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/notifications_controller.rb): `app/controllers/notifications_controller.rb`
- [Promotions](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/promotions_controller.rb): `app/controllers/promotions_controller.rb`
- [Dashboard](https://github.com/ngocquy2610/restaurant_management/blob/main/app/controllers/dashboards_controller.rb): `app/controllers/dashboards_controller.rb`

### Other components

- **Customer**
- **Staff**
- **Stripe**

## Connections

- Customer → Reservation flow: books table
- Reservation flow → Reservations: creates and updates
- Reservation flow → Tables and areas: reads availability
- Reservation flow → Preorders: offers preorder
- Staff → Reservation review: reviews bookings
- Reservation review → Reservations: updates status/table
- Reservation review → Timed release: reschedules release
- Reservation review → Notifications: sends notice
- Staff → Floor tables: manages tables
- Floor tables → Tables and areas: reads and writes
- Table layout editor → Floor canvas: dispatches shape
- Floor canvas → Floor tables: edits geometry
- Staff → Walk-in queue: seats walk-ins
- Walk-in queue → Queue entries: creates and seats
- Walk-in queue → Orders and items: creates dine-in order
- Customer → Preorders: submits dishes
- Preorders → Orders and items: creates preorder
- Timed release → Orders and items: releases to kitchen
- Customer → Order management: places order
- Order management → Orders and items: creates and updates
- Staff → Kitchen queue: fulfills orders
- Kitchen queue → Orders and items: reads and updates items
- Kitchen queue → Ingredients: reads recipe quantities
- Customer → Payments and bills: pays bill
- Payments and bills → Payment records: creates payment
- Payments and bills → Stripe: processes charge
- Payments and bills → Orders and items: updates order totals
- Staff → Menu management: maintains menu
- Menu management → Menu and recipes: manages catalog
- Staff → Sign-in: signs in
- Sign-in → Users: authenticates
- Customer → Notifications: views notices
- Customer → Promotions: browses offers
- Staff → Dashboard: reviews operations
