# bekaryab/restaurant architecture

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

- Interactive diagram: https://gitdiagram.com/bekaryab/restaurant
- Repository: https://github.com/bekaryab/restaurant

## Overview

QADAM serves restaurant customers through desktop and mobile menu experiences that share menu data and ordering, while admins manage dishes and orders. The principal customer flow is browse/search dishes, add quantities to a cart, and submit an idempotent order; the server resolves authoritative prices and availability before persisting it. Distinct admin stages cover Firebase login, menu maintenance, order review, and state transitions. The README documents reservations and other customer pages; their internal wiring is not sampled, so those links are kept conservative.

Main entry points: [`src/lib/prisma.ts`](https://github.com/bekaryab/restaurant/blob/main/src/lib/prisma.ts) (PostgreSQL), [`src/components/ResponsiveMenuRoot.tsx`](https://github.com/bekaryab/restaurant/blob/main/src/components/ResponsiveMenuRoot.tsx) (Mobile menu), [`src/app/api/orders/route.ts`](https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/route.ts) (Order creation), [`src/features/admin/orders/viewmodel/adminOrdersViewModel.ts`](https://github.com/bekaryab/restaurant/blob/main/src/features/admin/orders/viewmodel/adminOrdersViewModel.ts) (Order management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer experience"]
  node_desktop["Desktop book<br/>[ReferenceBook.tsx]"]
  node_mobile["Mobile menu"]
  node_menu_browse["Menu browsing<br/>[page.tsx]"]
  node_search["Mobile search"]
  node_cart["Cart and quantities<br/>[cartViewModel.ts]"]
  node_favorites["Favorites"]
  node_order_submit["Order submission<br/>[orderViewModel.ts]"]
  node_reservation["Reservations<br/>[page.tsx]"]
  node_profile["Customer profile<br/>[page.tsx]"]
end

subgraph group_admin["Administration"]
  node_admin_login["Admin login<br/>[authService.ts]"]
  node_dashboard["Dashboard"]
  node_menu_admin["Menu management"]
  node_order_admin["Order management"]
  node_admin_provision["Admin provisioning<br/>[route.ts]"]
end

subgraph group_api["Application API"]
  node_menu_api["Public menu API<br/>[route.ts]"]
  node_orders_api["Order creation<br/>[route.ts]"]
  node_order_status_api["Order status API<br/>[route.ts]"]
  node_bulk_api["Bulk status API<br/>[route.ts]"]
  node_admin_menu_api["Admin menu API<br/>[route.ts]"]
  node_category_api["Category API<br/>[route.ts]"]
  node_verify_api["Admin verification<br/>[route.ts]"]
  node_reservation_api["Reservation API<br/>[reservationApi.ts]"]
end

subgraph group_data["Data and identity"]
  node_postgres[("PostgreSQL<br/>[prisma.ts]")]
  node_firebase_auth{{"Firebase Auth"}}
end

node_visitor(("Restaurant visitor"))
node_admin_user(("Admin"))

node_visitor -->|"uses desktop"| node_desktop
node_visitor -->|"uses mobile"| node_mobile
node_desktop -->|"loads menu"| node_menu_api
node_mobile -->|"loads menu"| node_menu_api
node_menu_browse -->|"renders book"| node_desktop
node_menu_browse -->|"renders shell"| node_mobile
node_mobile -->|"filters dishes"| node_search
node_visitor -->|"browses menu"| node_menu_browse
node_visitor -->|"adds dishes"| node_cart
node_desktop -->|"adjusts quantities"| node_cart
node_mobile -->|"adjusts quantities"| node_cart
node_visitor -->|"marks favorites"| node_favorites
node_visitor -->|"places order"| node_order_submit
node_order_submit -->|"submits items"| node_orders_api
node_orders_api -->|"reads dishes"| node_postgres
node_orders_api -->|"writes order"| node_postgres
node_visitor -->|"requests booking"| node_reservation
node_reservation -.->|"sends reservation"| node_reservation_api
node_visitor -->|"views profile"| node_profile
node_admin_user -->|"signs in"| node_admin_login
node_admin_login -->|"authenticates"| node_firebase_auth
node_admin_login -->|"verifies token"| node_verify_api
node_verify_api -->|"verifies identity"| node_firebase_auth
node_admin_user -->|"reviews metrics"| node_dashboard
node_dashboard -->|"loads orders"| node_orders_api
node_admin_user -->|"manages dishes"| node_menu_admin
node_menu_admin -->|"maintains menu"| node_admin_menu_api
node_admin_menu_api -->|"reads and writes"| node_postgres
node_admin_user -->|"manages orders"| node_order_admin
node_order_admin -->|"loads orders"| node_orders_api
node_order_admin -->|"changes status"| node_order_status_api
node_order_admin -->|"updates batch"| node_bulk_api
node_order_status_api -->|"reads and writes"| node_postgres
node_bulk_api -->|"reads and writes"| node_postgres
node_admin_user -->|"manages categories"| node_category_api
node_category_api -->|"reads and writes"| node_postgres
node_admin_user -->|"creates admins"| node_admin_provision
node_admin_provision -->|"creates account"| node_firebase_auth

click node_desktop "https://github.com/bekaryab/restaurant/blob/main/src/components/book/reference-book/ReferenceBook.tsx"
click node_mobile "https://github.com/bekaryab/restaurant/blob/main/src/components/ResponsiveMenuRoot.tsx"
click node_menu_browse "https://github.com/bekaryab/restaurant/blob/main/src/app/menu/page.tsx"
click node_search "https://github.com/bekaryab/restaurant/blob/main/src/features/menu/viewmodel/useMobileSearchViewModel.ts"
click node_cart "https://github.com/bekaryab/restaurant/blob/main/src/features/cart/viewmodel/cartViewModel.ts"
click node_favorites "https://github.com/bekaryab/restaurant/blob/main/src/features/favorites/viewmodel/favoritesViewModel.ts"
click node_order_submit "https://github.com/bekaryab/restaurant/blob/main/src/features/order/viewmodel/orderViewModel.ts"
click node_reservation "https://github.com/bekaryab/restaurant/blob/main/src/app/reservation/page.tsx"
click node_profile "https://github.com/bekaryab/restaurant/blob/main/src/app/profile/page.tsx"
click node_admin_login "https://github.com/bekaryab/restaurant/blob/main/src/features/auth/service/authService.ts"
click node_dashboard "https://github.com/bekaryab/restaurant/blob/main/src/features/admin/dashboard/viewmodel/adminDashboardViewModel.ts"
click node_menu_admin "https://github.com/bekaryab/restaurant/blob/main/src/features/admin/menu/viewmodel/adminMenuViewModel.ts"
click node_order_admin "https://github.com/bekaryab/restaurant/blob/main/src/features/admin/orders/viewmodel/adminOrdersViewModel.ts"
click node_admin_provision "https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/users/route.ts"
click node_menu_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/menu/route.ts"
click node_orders_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/route.ts"
click node_order_status_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/%5Bid%5D/route.ts"
click node_bulk_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/bulk/route.ts"
click node_admin_menu_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/menu/route.ts"
click node_category_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/categories/route.ts"
click node_verify_api "https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/verify/route.ts"
click node_reservation_api "https://github.com/bekaryab/restaurant/blob/main/src/services/api/reservationApi.ts"
click node_postgres "https://github.com/bekaryab/restaurant/blob/main/src/lib/prisma.ts"

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_desktop,node_mobile,node_menu_browse,node_search,node_cart,node_favorites,node_order_submit,node_reservation,node_profile toneBlue
class node_admin_login,node_dashboard,node_menu_admin,node_order_admin,node_admin_provision toneAmber
class node_menu_api,node_orders_api,node_order_status_api,node_bulk_api,node_admin_menu_api,node_category_api,node_verify_api,node_reservation_api toneMint
class node_postgres,node_firebase_auth toneRose
class node_visitor,node_admin_user toneIndigo
```

## Components

### Customer experience

- [Desktop book](https://github.com/bekaryab/restaurant/blob/main/src/components/book/reference-book/ReferenceBook.tsx): `src/components/book/reference-book/ReferenceBook.tsx`
- [Mobile menu](https://github.com/bekaryab/restaurant/blob/main/src/components/ResponsiveMenuRoot.tsx): `src/components/ResponsiveMenuRoot.tsx`
- [Menu browsing](https://github.com/bekaryab/restaurant/blob/main/src/app/menu/page.tsx): `src/app/menu/page.tsx`
- [Mobile search](https://github.com/bekaryab/restaurant/blob/main/src/features/menu/viewmodel/useMobileSearchViewModel.ts): `src/features/menu/viewmodel/useMobileSearchViewModel.ts`
- [Cart and quantities](https://github.com/bekaryab/restaurant/blob/main/src/features/cart/viewmodel/cartViewModel.ts): `src/features/cart/viewmodel/cartViewModel.ts`
- [Favorites](https://github.com/bekaryab/restaurant/blob/main/src/features/favorites/viewmodel/favoritesViewModel.ts): `src/features/favorites/viewmodel/favoritesViewModel.ts`
- [Order submission](https://github.com/bekaryab/restaurant/blob/main/src/features/order/viewmodel/orderViewModel.ts): `src/features/order/viewmodel/orderViewModel.ts`
- [Reservations](https://github.com/bekaryab/restaurant/blob/main/src/app/reservation/page.tsx): `src/app/reservation/page.tsx`
- [Customer profile](https://github.com/bekaryab/restaurant/blob/main/src/app/profile/page.tsx): `src/app/profile/page.tsx`

### Administration

- [Admin login](https://github.com/bekaryab/restaurant/blob/main/src/features/auth/service/authService.ts): `src/features/auth/service/authService.ts`
- [Dashboard](https://github.com/bekaryab/restaurant/blob/main/src/features/admin/dashboard/viewmodel/adminDashboardViewModel.ts): `src/features/admin/dashboard/viewmodel/adminDashboardViewModel.ts`
- [Menu management](https://github.com/bekaryab/restaurant/blob/main/src/features/admin/menu/viewmodel/adminMenuViewModel.ts): `src/features/admin/menu/viewmodel/adminMenuViewModel.ts`
- [Order management](https://github.com/bekaryab/restaurant/blob/main/src/features/admin/orders/viewmodel/adminOrdersViewModel.ts): `src/features/admin/orders/viewmodel/adminOrdersViewModel.ts`
- [Admin provisioning](https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/users/route.ts): `src/app/api/admin/users/route.ts`

### Application API

- [Public menu API](https://github.com/bekaryab/restaurant/blob/main/src/app/api/menu/route.ts): `src/app/api/menu/route.ts`
- [Order creation](https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/route.ts): `src/app/api/orders/route.ts`
- [Order status API](https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/%5Bid%5D/route.ts): `src/app/api/orders/[id]/route.ts`
- [Bulk status API](https://github.com/bekaryab/restaurant/blob/main/src/app/api/orders/bulk/route.ts): `src/app/api/orders/bulk/route.ts`
- [Admin menu API](https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/menu/route.ts): `src/app/api/admin/menu/route.ts`
- [Category API](https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/categories/route.ts): `src/app/api/admin/categories/route.ts`
- [Admin verification](https://github.com/bekaryab/restaurant/blob/main/src/app/api/admin/verify/route.ts): `src/app/api/admin/verify/route.ts`
- [Reservation API](https://github.com/bekaryab/restaurant/blob/main/src/services/api/reservationApi.ts): `src/services/api/reservationApi.ts`

### Data and identity

- [PostgreSQL](https://github.com/bekaryab/restaurant/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- **Firebase Auth**

### Other components

- **Restaurant visitor**
- **Admin**

## Connections

- Restaurant visitor → Desktop book: uses desktop
- Restaurant visitor → Mobile menu: uses mobile
- Desktop book → Public menu API: loads menu
- Mobile menu → Public menu API: loads menu
- Menu browsing → Desktop book: renders book
- Menu browsing → Mobile menu: renders shell
- Mobile menu → Mobile search: filters dishes
- Restaurant visitor → Menu browsing: browses menu
- Restaurant visitor → Cart and quantities: adds dishes
- Desktop book → Cart and quantities: adjusts quantities
- Mobile menu → Cart and quantities: adjusts quantities
- Restaurant visitor → Favorites: marks favorites
- Restaurant visitor → Order submission: places order
- Order submission → Order creation: submits items
- Order creation → PostgreSQL: reads dishes
- Order creation → PostgreSQL: writes order
- Restaurant visitor → Reservations: requests booking
- Reservations → Reservation API: sends reservation
- Restaurant visitor → Customer profile: views profile
- Admin → Admin login: signs in
- Admin login → Firebase Auth: authenticates
- Admin login → Admin verification: verifies token
- Admin verification → Firebase Auth: verifies identity
- Admin → Dashboard: reviews metrics
- Dashboard → Order creation: loads orders
- Admin → Menu management: manages dishes
- Menu management → Admin menu API: maintains menu
- Admin menu API → PostgreSQL: reads and writes
- Admin → Order management: manages orders
- Order management → Order creation: loads orders
- Order management → Order status API: changes status
- Order management → Bulk status API: updates batch
- Order status API → PostgreSQL: reads and writes
- Bulk status API → PostgreSQL: reads and writes
- Admin → Category API: manages categories
- Category API → PostgreSQL: reads and writes
- Admin → Admin provisioning: creates admins
- Admin provisioning → Firebase Auth: creates account
