# ibrahimalrahbi/menugateapp architecture

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

- Interactive diagram: https://gitdiagram.com/ibrahimalrahbi/menugateapp
- Repository: https://github.com/ibrahimalrahbi/menugateapp

## Overview

MenuGate is a restaurant-menu management application: visitors browse public, shareable menus; owners authenticate with Google to manage their menus and items; admins can review and delete menus across owners. The browser UI calls the Spring REST API, whose controllers delegate menu operations to the service layer and repositories backed by Oracle. The README documents the authentication and role model; sampled source confirms menu-service persistence and admin controller delegation, but not the full security or login wiring.

Main entry points: [`src/main/java/com/menugate/app/service/MenuService.java`](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/service/MenuService.java) (Menu operations), [`src/main/resources/static/js/api.js`](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/js/api.js) (API client), [`src/main/resources/static/index.html`](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/index.html) (MenuGate browser UI), [`src/main/java/com/menugate/app/repository/UserRepository.java`](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/UserRepository.java) (User repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Browser experience"]
  node_browser["MenuGate browser UI<br/>[index.html]"]
  node_menu_pages["Menu and dashboard pages<br/>[menu.html]"]
  node_admin_page["Admin page<br/>[admin.html]"]
  node_frontend["UI workflows<br/>[app.js]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["REST API"]
  node_menu_controller["Public and owner menus"]
  node_admin_controller["Admin menu endpoints"]
  node_auth_controller["Session info endpoint"]
  node_security["OAuth and access rules"]
  node_exceptions["API error mapping"]
end

subgraph group_domain["Menu domain"]
  node_menu_service["Menu operations<br/>[MenuService.java]"]
  node_user_service["User provisioning<br/>[UserService.java]"]
  node_dto["API data contracts<br/>[MenuResponse.java]"]
end

subgraph group_persistence["Persistence and identity"]
  node_entities["User, menu, and item<br/>[Menu.java]"]
  node_menu_repo["Menu repository"]
  node_item_repo["Menu-item repository"]
  node_user_repo["User repository"]
end

node_visitors(("Visitors"))
node_owners(("Restaurant owners"))
node_admins(("Administrators"))
node_oracle[("Oracle XE database")]
node_google(("Google OAuth"))

node_visitors -->|"browse"| node_browser
node_owners -->|"manage menus"| node_browser
node_admins -->|"review menus"| node_admin_page
node_browser -->|"opens"| node_menu_pages
node_browser -->|"opens"| node_admin_page
node_menu_pages -->|"renders"| node_frontend
node_admin_page -->|"renders"| node_frontend
node_frontend -->|"makes requests"| node_api_client
node_api_client -->|"HTTP requests"| node_menu_controller
node_api_client -->|"admin requests"| node_admin_controller
node_api_client -->|"session requests"| node_auth_controller
node_menu_controller -->|"delegates menu actions"| node_menu_service
node_admin_controller -->|"delegates admin actions"| node_menu_service
node_menu_controller -->|"accepts and returns"| node_dto
node_menu_service -->|"maps responses"| node_dto
node_menu_service -->|"reads and writes menus"| node_menu_repo
node_menu_service -->|"reads and writes items"| node_item_repo
node_menu_service -->|"looks up owners"| node_user_repo
node_user_service -->|"finds and saves users"| node_user_repo
node_menu_repo -->|"persists menus"| node_oracle
node_item_repo -->|"persists items"| node_oracle
node_user_repo -->|"persists users"| node_oracle
node_menu_repo -->|"maps menu data"| node_entities
node_item_repo -->|"maps item data"| node_entities
node_user_repo -->|"maps user data"| node_entities
node_security -.->|"OAuth login"| node_google

click node_browser "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/index.html"
click node_menu_pages "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/menu.html"
click node_admin_page "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/admin.html"
click node_frontend "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/js/app.js"
click node_api_client "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/js/api.js"
click node_menu_controller "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/MenuController.java"
click node_admin_controller "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/AdminMenuController.java"
click node_auth_controller "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/AuthController.java"
click node_security "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/config/SecurityConfig.java"
click node_exceptions "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/exception/GlobalExceptionHandler.java"
click node_menu_service "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/service/MenuService.java"
click node_user_service "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/service/UserService.java"
click node_dto "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/dto/MenuResponse.java"
click node_entities "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/model/Menu.java"
click node_menu_repo "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/MenuRepository.java"
click node_item_repo "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/MenuItemRepository.java"
click node_user_repo "https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/UserRepository.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_browser,node_menu_pages,node_admin_page,node_frontend,node_api_client toneBlue
class node_menu_controller,node_admin_controller,node_auth_controller,node_security,node_exceptions,node_oracle toneAmber
class node_menu_service,node_user_service,node_dto toneMint
class node_entities,node_menu_repo,node_item_repo,node_user_repo toneRose
class node_visitors,node_owners,node_admins,node_google toneIndigo
```

## Components

### Browser experience

- [MenuGate browser UI](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/index.html): `src/main/resources/static/index.html`
- [Menu and dashboard pages](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/menu.html): `src/main/resources/static/menu.html`
- [Admin page](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/admin.html): `src/main/resources/static/admin.html`
- [UI workflows](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/js/app.js): `src/main/resources/static/js/app.js`
- [API client](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/resources/static/js/api.js): `src/main/resources/static/js/api.js`

### REST API

- [Public and owner menus](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/MenuController.java): `src/main/java/com/menugate/app/controller/MenuController.java`
- [Admin menu endpoints](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/AdminMenuController.java): `src/main/java/com/menugate/app/controller/AdminMenuController.java`
- [Session info endpoint](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/controller/AuthController.java): `src/main/java/com/menugate/app/controller/AuthController.java`
- [OAuth and access rules](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/config/SecurityConfig.java): `src/main/java/com/menugate/app/config/SecurityConfig.java`
- [API error mapping](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/exception/GlobalExceptionHandler.java): `src/main/java/com/menugate/app/exception/GlobalExceptionHandler.java`

### Menu domain

- [Menu operations](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/service/MenuService.java): `src/main/java/com/menugate/app/service/MenuService.java`
- [User provisioning](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/service/UserService.java): `src/main/java/com/menugate/app/service/UserService.java`
- [API data contracts](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/dto/MenuResponse.java): `src/main/java/com/menugate/app/dto/MenuResponse.java`

### Persistence and identity

- [User, menu, and item](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/model/Menu.java): `src/main/java/com/menugate/app/model/Menu.java`
- [Menu repository](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/MenuRepository.java): `src/main/java/com/menugate/app/repository/MenuRepository.java`
- [Menu-item repository](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/MenuItemRepository.java): `src/main/java/com/menugate/app/repository/MenuItemRepository.java`
- [User repository](https://github.com/ibrahimalrahbi/menugateapp/blob/main/src/main/java/com/menugate/app/repository/UserRepository.java): `src/main/java/com/menugate/app/repository/UserRepository.java`

### Other components

- **Visitors**
- **Restaurant owners**
- **Administrators**
- **Oracle XE database**
- **Google OAuth**

## Connections

- Visitors → MenuGate browser UI: browse
- Restaurant owners → MenuGate browser UI: manage menus
- Administrators → Admin page: review menus
- MenuGate browser UI → Menu and dashboard pages: opens
- MenuGate browser UI → Admin page: opens
- Menu and dashboard pages → UI workflows: renders
- Admin page → UI workflows: renders
- UI workflows → API client: makes requests
- API client → Public and owner menus: HTTP requests
- API client → Admin menu endpoints: admin requests
- API client → Session info endpoint: session requests
- Public and owner menus → Menu operations: delegates menu actions
- Admin menu endpoints → Menu operations: delegates admin actions
- Public and owner menus → API data contracts: accepts and returns
- Menu operations → API data contracts: maps responses
- Menu operations → Menu repository: reads and writes menus
- Menu operations → Menu-item repository: reads and writes items
- Menu operations → User repository: looks up owners
- User provisioning → User repository: finds and saves users
- Menu repository → Oracle XE database: persists menus
- Menu-item repository → Oracle XE database: persists items
- User repository → Oracle XE database: persists users
- Menu repository → User, menu, and item: maps menu data
- Menu-item repository → User, menu, and item: maps item data
- User repository → User, menu, and item: maps user data
- OAuth and access rules → Google OAuth: OAuth login
