# nereu-vitor/localeats-api architecture

> Architecture diagram of the GitHub repository nereu-vitor/localeats-api, 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/nereu-vitor/localeats-api
- Repository: https://github.com/nereu-vitor/localeats-api

## Overview

Local Eats is a REST API for local eateries to manage users, addresses, menu items and orders. The main workflow is a client or administrator sending an authenticated request; order creation resolves the user, delivery address and products, calculates fees and totals, then saves the order. The README documents CRUD, role-based access and JWT protection. The sampled services support the order, user and product links shown; wiring for unsampled controllers and security configuration is represented only where documented or evident from the tree.

Main entry points: [`localeats-api/src/main/java/com/nereuvitor/localeatsapi/security/JWTAuthenticationFilter.java`](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/security/JWTAuthenticationFilter.java) (JWT Filters), [`localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/OrderService.java`](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/OrderService.java) (Order Logic), [`localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserService.java`](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserService.java) (User Logic), [`localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/ProductService.java`](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/ProductService.java) (Product Logic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_orders_api["Order API"]
  node_users_api["User API"]
  node_products_api["Product API"]
  node_addresses_api["Address API"]
  node_drinks_api["Drink API"]
  node_snacks_api["Snack API"]
  node_errors["Error Responses"]
end

subgraph group_domain["Business Services"]
  node_order_service["Order Logic<br/>[OrderService.java]"]
  node_user_service["User Logic<br/>[UserService.java]"]
  node_product_service["Product Logic"]
  node_address_service["Address Logic"]
  node_drink_service["Drink Logic<br/>[DrinkService.java]"]
  node_snack_service["Snack Logic<br/>[SnackService.java]"]
  node_user_details["User Lookup"]
end

subgraph group_data["Persistence"]
  node_order_repo["Order Repository"]
  node_user_repo["User Repository"]
  node_product_repo["Product Repository"]
  node_address_repo["Address Repository"]
  node_drink_repo["Drink Repository"]
  node_snack_repo["Snack Repository"]
  node_mysql[("MySQL")]
end

subgraph group_security["Security"]
  node_jwt["JWT Filters"]
  node_security_config["Access Rules"]
end

node_caller(("API Caller"))

node_caller -->|"sends request"| node_jwt
node_jwt -->|"protects routes"| node_orders_api
node_jwt -->|"protects routes"| node_users_api
node_jwt -->|"protects routes"| node_products_api
node_jwt -->|"protects routes"| node_addresses_api
node_jwt -->|"protects routes"| node_drinks_api
node_jwt -->|"protects routes"| node_snacks_api
node_security_config -->|"configures filters"| node_jwt
node_orders_api -->|"calls"| node_order_service
node_users_api -->|"calls"| node_user_service
node_products_api -->|"calls"| node_product_service
node_addresses_api -->|"calls"| node_address_service
node_drinks_api -->|"calls"| node_drink_service
node_snacks_api -->|"calls"| node_snack_service
node_order_service -->|"resolves user"| node_user_service
node_order_service -->|"resolves address"| node_address_service
node_order_service -->|"resolves products"| node_product_service
node_order_service -->|"reads and saves"| node_order_repo
node_user_service -->|"reads and saves"| node_user_repo
node_product_service -->|"reads and saves"| node_product_repo
node_address_service -->|"reads and saves"| node_address_repo
node_drink_service -->|"saves"| node_drink_repo
node_snack_service -->|"persists items"| node_snack_repo
node_user_details -->|"loads user"| node_user_repo
node_order_repo -->|"persists orders"| node_mysql
node_user_repo -->|"persists users"| node_mysql
node_product_repo -->|"persists products"| node_mysql
node_address_repo -->|"persists addresses"| node_mysql
node_drink_repo -->|"persists drinks"| node_mysql
node_snack_repo -->|"persists snacks"| node_mysql
node_errors -->|"returns errors"| node_caller

click node_orders_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/OrderController.java"
click node_users_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/UserController.java"
click node_products_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/ProductController.java"
click node_addresses_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/AddressController.java"
click node_drinks_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/DrinkController.java"
click node_snacks_api "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/SnackController.java"
click node_errors "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/exceptions/GlobalExceptionHandler.java"
click node_order_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/OrderService.java"
click node_user_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserService.java"
click node_product_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/ProductService.java"
click node_address_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/AddressService.java"
click node_drink_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/DrinkService.java"
click node_snack_service "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/SnackService.java"
click node_user_details "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserDetailsServiceImpl.java"
click node_order_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/OrderRepository.java"
click node_user_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/UserRepository.java"
click node_product_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/ProductRepository.java"
click node_address_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/AddressRepository.java"
click node_drink_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/DrinkRepository.java"
click node_snack_repo "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/SnackRepository.java"
click node_jwt "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/security/JWTAuthenticationFilter.java"
click node_security_config "https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/configs/SecurityConfig.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_orders_api,node_users_api,node_products_api,node_addresses_api,node_drinks_api,node_snacks_api,node_errors toneBlue
class node_order_service,node_user_service,node_product_service,node_address_service,node_drink_service,node_snack_service,node_user_details toneAmber
class node_order_repo,node_user_repo,node_product_repo,node_address_repo,node_drink_repo,node_snack_repo,node_mysql,node_caller toneMint
class node_jwt,node_security_config toneRose
```

## Components

### REST API

- [Order API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/OrderController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/OrderController.java`
- [User API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/UserController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/UserController.java`
- [Product API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/ProductController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/ProductController.java`
- [Address API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/AddressController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/AddressController.java`
- [Drink API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/DrinkController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/DrinkController.java`
- [Snack API](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/SnackController.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/controllers/SnackController.java`
- [Error Responses](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/exceptions/GlobalExceptionHandler.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/exceptions/GlobalExceptionHandler.java`

### Business Services

- [Order Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/OrderService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/OrderService.java`
- [User Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserService.java`
- [Product Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/ProductService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/ProductService.java`
- [Address Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/AddressService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/AddressService.java`
- [Drink Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/DrinkService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/DrinkService.java`
- [Snack Logic](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/SnackService.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/SnackService.java`
- [User Lookup](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserDetailsServiceImpl.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/services/UserDetailsServiceImpl.java`

### Persistence

- [Order Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/OrderRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/OrderRepository.java`
- [User Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/UserRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/UserRepository.java`
- [Product Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/ProductRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/ProductRepository.java`
- [Address Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/AddressRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/AddressRepository.java`
- [Drink Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/DrinkRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/DrinkRepository.java`
- [Snack Repository](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/SnackRepository.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/repositories/SnackRepository.java`
- **MySQL**

### Security

- [JWT Filters](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/security/JWTAuthenticationFilter.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/security/JWTAuthenticationFilter.java`
- [Access Rules](https://github.com/nereu-vitor/localeats-api/blob/main/localeats-api/src/main/java/com/nereuvitor/localeatsapi/configs/SecurityConfig.java): `localeats-api/src/main/java/com/nereuvitor/localeatsapi/configs/SecurityConfig.java`

### Other components

- **API Caller**

## Connections

- API Caller → JWT Filters: sends request
- JWT Filters → Order API: protects routes
- JWT Filters → User API: protects routes
- JWT Filters → Product API: protects routes
- JWT Filters → Address API: protects routes
- JWT Filters → Drink API: protects routes
- JWT Filters → Snack API: protects routes
- Access Rules → JWT Filters: configures filters
- Order API → Order Logic: calls
- User API → User Logic: calls
- Product API → Product Logic: calls
- Address API → Address Logic: calls
- Drink API → Drink Logic: calls
- Snack API → Snack Logic: calls
- Order Logic → User Logic: resolves user
- Order Logic → Address Logic: resolves address
- Order Logic → Product Logic: resolves products
- Order Logic → Order Repository: reads and saves
- User Logic → User Repository: reads and saves
- Product Logic → Product Repository: reads and saves
- Address Logic → Address Repository: reads and saves
- Drink Logic → Drink Repository: saves
- Snack Logic → Snack Repository: persists items
- User Lookup → User Repository: loads user
- Order Repository → MySQL: persists orders
- User Repository → MySQL: persists users
- Product Repository → MySQL: persists products
- Address Repository → MySQL: persists addresses
- Drink Repository → MySQL: persists drinks
- Snack Repository → MySQL: persists snacks
- Error Responses → API Caller: returns errors
