# imrajeevnayan/food-fiesta architecture

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

- Interactive diagram: https://gitdiagram.com/imrajeevnayan/food-fiesta
- Repository: https://github.com/imrajeevnayan/food-fiesta

## Overview

Food Fiesta is a Spring Boot food-ordering and delivery platform. Customers browse restaurants and menus, place orders, and follow delivery; administrators manage platform data. The documented order path persists a placed order, publishes a Kafka event, assigns a nearby available driver, then updates order state and broadcasts it. Other major capabilities include geospatial restaurant discovery, live driver tracking, ETA calculation, and session/OAuth2 security. Paths and links for some subsystems are based on the README and repository tree; source excerpts were limited to a frontend alert, so uncertain controller-to-service wiring is omitted.

Main entry points: [`src/main/java/com/example/demo/repositories`](https://github.com/imrajeevnayan/food-fiesta/tree/main/src/main/java/com/example/demo/repositories) (JPA repositories), [`src/main/java/com/example/demo/services/OrderRoutingConsumer.java`](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderRoutingConsumer.java) (Driver assignment consumer), [`src/main/java/com/example/demo/services/DeliveryEstimateService.java`](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/DeliveryEstimateService.java) (ETA calculation), [`src/main/java/com/example/demo/services/OrderServices.java`](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderServices.java) (Order services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Storefront and API"]
  node_app["Spring Boot app"]
  node_webpages["Thymeleaf storefront"]
  node_order_api["Order endpoints"]
  node_catalog_api["Restaurant and product endpoints"]
  node_product_api["Product endpoints"]
  node_cart_api["Cart endpoints"]
  node_account_api["Accounts and OAuth"]
  node_security["Authentication config"]
  node_tracking_api["Driver location endpoints"]
  node_eta_api["Delivery estimate endpoint"]
end

subgraph group_orders["Ordering and delivery"]
  node_order_service["Order services<br/>[OrderServices.java]"]
  node_order_state["Order state machine"]
  node_order_event["Order event producer"]
  node_routing_consumer["Driver assignment consumer"]
  node_tracking["Driver location service"]
  node_eta_service["ETA calculation"]
end

subgraph group_data["Persistence and geo"]
  node_repositories["JPA repositories"]
  node_driver_geo_repo["Driver geo repository"]
  node_postgres[("PostgreSQL + PostGIS")]
  node_redis[("Redis Geo")]
end

subgraph group_integrations["Messaging and routing"]
  node_routing_client["Road routing client"]
  node_kafka["Kafka"]
  node_map_service["OSRM-compatible routing"]
  node_ai_service["Spring AI / OpenAI"]
end

node_customer(("Customer or admin"))
node_browser(("Browser or mobile client"))

node_customer -->|"browses"| node_webpages
node_browser -->|"HTTP / STOMP"| node_app
node_app -->|"serves"| node_webpages
node_customer -->|"checks out"| node_order_api
node_order_api -->|"handles orders"| node_order_service
node_order_service -->|"persists order"| node_repositories
node_repositories -->|"reads / writes"| node_postgres
node_order_service -->|"publishes event"| node_order_event
node_order_event -->|"sends event"| node_kafka
node_kafka -->|"delivers event"| node_routing_consumer
node_routing_consumer -->|"finds nearby driver"| node_driver_geo_repo
node_driver_geo_repo -->|"searches geo"| node_redis
node_routing_consumer -->|"assigns driver"| node_repositories
node_routing_consumer -->|"confirms order"| node_order_state
node_order_state -->|"updates state"| node_repositories
node_order_state -->|"broadcasts status"| node_browser
node_customer -->|"searches nearby"| node_catalog_api
node_catalog_api -->|"queries restaurants"| node_repositories
node_customer -->|"shares location"| node_tracking_api
node_tracking_api -->|"updates position"| node_tracking
node_tracking -->|"caches position"| node_driver_geo_repo
node_tracking -->|"broadcasts location"| node_browser
node_customer -->|"requests estimate"| node_eta_api
node_eta_api -->|"calculates ETA"| node_eta_service
node_eta_service -->|"reads order data"| node_repositories
node_eta_service -->|"gets road route"| node_routing_client
node_routing_client -->|"requests route"| node_map_service
node_eta_service -.->|"refines estimate"| node_ai_service
node_customer -->|"signs in"| node_account_api
node_account_api -->|"authenticates"| node_security
node_customer -->|"manages cart"| node_cart_api
node_customer -->|"browses menu"| node_product_api

click node_app "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/FoodFrenzyApplication.java"
click node_webpages "https://github.com/imrajeevnayan/food-fiesta/tree/main/src/main/resources/templates"
click node_order_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/OrderController.java"
click node_catalog_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/RestaurantController.java"
click node_product_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/ProductController.java"
click node_cart_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/CartController.java"
click node_account_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/UserController.java"
click node_security "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/config/SecurityConfig.java"
click node_order_service "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderServices.java"
click node_order_state "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderStateService.java"
click node_order_event "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderEventProducer.java"
click node_routing_consumer "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderRoutingConsumer.java"
click node_tracking "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/DriverLocationService.java"
click node_tracking_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/DriverLocationController.java"
click node_eta_api "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/DeliveryEstimateController.java"
click node_eta_service "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/DeliveryEstimateService.java"
click node_routing_client "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/MapRoutingClient.java"
click node_repositories "https://github.com/imrajeevnayan/food-fiesta/tree/main/src/main/java/com/example/demo/repositories"
click node_driver_geo_repo "https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/repositories/DriverGeoRepository.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_app,node_webpages,node_order_api,node_catalog_api,node_product_api,node_cart_api,node_account_api,node_security,node_tracking_api,node_eta_api,node_browser toneBlue
class node_order_service,node_order_state,node_order_event,node_routing_consumer,node_tracking,node_eta_service toneAmber
class node_repositories,node_driver_geo_repo,node_postgres,node_redis toneMint
class node_routing_client,node_kafka,node_map_service,node_ai_service toneRose
class node_customer toneIndigo
```

## Components

### Storefront and API

- [Spring Boot app](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/FoodFrenzyApplication.java): `src/main/java/com/example/demo/FoodFrenzyApplication.java`
- [Thymeleaf storefront](https://github.com/imrajeevnayan/food-fiesta/tree/main/src/main/resources/templates): `src/main/resources/templates`
- [Order endpoints](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/OrderController.java): `src/main/java/com/example/demo/controllers/OrderController.java`
- [Restaurant and product endpoints](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/RestaurantController.java): `src/main/java/com/example/demo/controllers/RestaurantController.java`
- [Product endpoints](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/ProductController.java): `src/main/java/com/example/demo/controllers/ProductController.java`
- [Cart endpoints](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/CartController.java): `src/main/java/com/example/demo/controllers/CartController.java`
- [Accounts and OAuth](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/UserController.java): `src/main/java/com/example/demo/controllers/UserController.java`
- [Authentication config](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/config/SecurityConfig.java): `src/main/java/com/example/demo/config/SecurityConfig.java`
- [Driver location endpoints](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/DriverLocationController.java): `src/main/java/com/example/demo/controllers/DriverLocationController.java`
- [Delivery estimate endpoint](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/controllers/DeliveryEstimateController.java): `src/main/java/com/example/demo/controllers/DeliveryEstimateController.java`

### Ordering and delivery

- [Order services](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderServices.java): `src/main/java/com/example/demo/services/OrderServices.java`
- [Order state machine](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderStateService.java): `src/main/java/com/example/demo/services/OrderStateService.java`
- [Order event producer](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderEventProducer.java): `src/main/java/com/example/demo/services/OrderEventProducer.java`
- [Driver assignment consumer](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/OrderRoutingConsumer.java): `src/main/java/com/example/demo/services/OrderRoutingConsumer.java`
- [Driver location service](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/DriverLocationService.java): `src/main/java/com/example/demo/services/DriverLocationService.java`
- [ETA calculation](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/DeliveryEstimateService.java): `src/main/java/com/example/demo/services/DeliveryEstimateService.java`

### Persistence and geo

- [JPA repositories](https://github.com/imrajeevnayan/food-fiesta/tree/main/src/main/java/com/example/demo/repositories): `src/main/java/com/example/demo/repositories`
- [Driver geo repository](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/repositories/DriverGeoRepository.java): `src/main/java/com/example/demo/repositories/DriverGeoRepository.java`
- **PostgreSQL + PostGIS**
- **Redis Geo**

### Messaging and routing

- [Road routing client](https://github.com/imrajeevnayan/food-fiesta/blob/main/src/main/java/com/example/demo/services/MapRoutingClient.java): `src/main/java/com/example/demo/services/MapRoutingClient.java`
- **Kafka**
- **OSRM-compatible routing**
- **Spring AI / OpenAI**

### Other components

- **Customer or admin**
- **Browser or mobile client**

## Connections

- Customer or admin → Thymeleaf storefront: browses
- Browser or mobile client → Spring Boot app: HTTP / STOMP
- Spring Boot app → Thymeleaf storefront: serves
- Customer or admin → Order endpoints: checks out
- Order endpoints → Order services: handles orders
- Order services → JPA repositories: persists order
- JPA repositories → PostgreSQL + PostGIS: reads / writes
- Order services → Order event producer: publishes event
- Order event producer → Kafka: sends event
- Kafka → Driver assignment consumer: delivers event
- Driver assignment consumer → Driver geo repository: finds nearby driver
- Driver geo repository → Redis Geo: searches geo
- Driver assignment consumer → JPA repositories: assigns driver
- Driver assignment consumer → Order state machine: confirms order
- Order state machine → JPA repositories: updates state
- Order state machine → Browser or mobile client: broadcasts status
- Customer or admin → Restaurant and product endpoints: searches nearby
- Restaurant and product endpoints → JPA repositories: queries restaurants
- Customer or admin → Driver location endpoints: shares location
- Driver location endpoints → Driver location service: updates position
- Driver location service → Driver geo repository: caches position
- Driver location service → Browser or mobile client: broadcasts location
- Customer or admin → Delivery estimate endpoint: requests estimate
- Delivery estimate endpoint → ETA calculation: calculates ETA
- ETA calculation → JPA repositories: reads order data
- ETA calculation → Road routing client: gets road route
- Road routing client → OSRM-compatible routing: requests route
- ETA calculation → Spring AI / OpenAI: refines estimate
- Customer or admin → Accounts and OAuth: signs in
- Accounts and OAuth → Authentication config: authenticates
- Customer or admin → Cart endpoints: manages cart
- Customer or admin → Product endpoints: browses menu
