# ramzy-saad/java-spring-ecomapplicationmicroservicesdemo architecture

> Architecture diagram of the GitHub repository ramzy-saad/java-spring-ecomapplicationmicroservicesdemo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo
- Repository: https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo

## Overview

This is an e-commerce microservices application: users and products are managed by separate services, while the order service supports cart operations and order creation. The main flow is client request through the gateway to cart and order handling; cart operations consult product and user services, and order creation persists an order and emits an event for notification consumption. The graph also includes identity provisioning, discovery, and configuration services. Relationships for unsampled gateway routing and infrastructure wiring are shown only as unverified where useful.

Main entry points: [`gateway/src/main/java/com/ecom/gateway/GatewayConfig.java`](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/GatewayConfig.java) (API gateway), [`order/src/main/java/com/ecomMicroservices/order/services/CartService.java`](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/CartService.java) (Cart operations), [`order/src/main/java/com/ecomMicroservices/order/services/OrderService.java`](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/OrderService.java) (Order creation), [`product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java`](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java) (Product API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["Access and platform"]
  node_gateway["API gateway<br/>[GatewayConfig.java]"]
  node_jwt["JWT filter<br/>[JwtAuthFilter.java]"]
  node_fallback["Fallback responses"]
  node_discovery["Service discovery"]
  node_config["Config server"]
  node_authflow["Auth flow"]
end

subgraph group_catalog["Catalog service"]
  node_product_api["Product API"]
  node_product_service["Product operations"]
  node_product_store[("Product records")]
end

subgraph group_identity["User and identity"]
  node_user_api["User API"]
  node_user_service["User operations<br/>[UserService.java]"]
  node_user_store[("User records")]
  node_keycloak_admin["Keycloak administration"]
end

subgraph group_commerce["Cart and orders"]
  node_cart_api["Cart API"]
  node_order_api["Order API"]
  node_cart_service["Cart operations<br/>[CartService.java]"]
  node_product_client["Product client"]
  node_user_client["User client"]
  node_cart_store[("Cart records")]
  node_order_service["Order creation<br/>[OrderService.java]"]
  node_order_store[("Order records")]
end

subgraph group_messaging["Order notifications"]
  node_consumer["Order event consumer"]
  node_notification_app["Notification service"]
end

node_customer(("Client"))
node_keycloak["Keycloak"]
node_broker["Message broker"]

node_customer -.->|"sends requests"| node_gateway
node_gateway -.->|"filters requests"| node_jwt
node_gateway -.->|"serves fallback"| node_fallback
node_gateway -.->|"routes requests"| node_cart_api
node_gateway -.->|"routes requests"| node_order_api
node_gateway -.->|"routes requests"| node_product_api
node_gateway -.->|"routes requests"| node_user_api
node_product_api -->|"delegates to"| node_product_service
node_product_service -->|"reads and writes"| node_product_store
node_user_api -->|"delegates to"| node_user_service
node_user_service -->|"reads and writes"| node_user_store
node_user_service -->|"provisions identity"| node_keycloak_admin
node_keycloak_admin -->|"administers users"| node_keycloak
node_cart_api -->|"delegates to"| node_cart_service
node_order_api -->|"delegates to"| node_order_service
node_cart_service -->|"fetches product"| node_product_client
node_product_client -.->|"requests product"| node_product_api
node_cart_service -->|"fetches user"| node_user_client
node_user_client -.->|"requests user"| node_user_api
node_cart_service -->|"reads and writes"| node_cart_store
node_order_service -->|"loads and clears"| node_cart_service
node_order_service -->|"saves order"| node_order_store
node_order_service -->|"emits event"| node_broker
node_broker -.->|"delivers event"| node_consumer
node_consumer -.->|"runs within"| node_notification_app
node_discovery -.->|"supports discovery"| node_gateway
node_config -.->|"provides configuration"| node_gateway
node_config -.->|"provides configuration"| node_product_api
node_authflow -.->|"uses authentication"| node_keycloak

click node_gateway "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/GatewayConfig.java"
click node_jwt "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/JwtAuthFilter.java"
click node_fallback "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/Fallbackcontroller.java"
click node_discovery "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/eureka/src/main/java/com/eureka/eureka/EurekaApplication.java"
click node_config "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/configserver/configserver/src/main/java/com/ecom/configserver/ConfigserverApplication.java"
click node_authflow "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/authFlow/src/main/java/com/ecom/authFlow/HomeController.java"
click node_product_api "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java"
click node_product_service "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/services/ProductService.java"
click node_product_store "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/repositories/ProductRepository.java"
click node_user_api "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/controllers/UserController.java"
click node_user_service "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/services/UserService.java"
click node_user_store "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/repositories/UserRepository.java"
click node_keycloak_admin "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/services/KeyCloakAdminService.java"
click node_cart_api "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/controllers/CartController.java"
click node_order_api "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/controllers/OrderController.java"
click node_cart_service "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/CartService.java"
click node_product_client "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/clients/ProductServiceClient.java"
click node_user_client "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/clients/UserServiceClient.java"
click node_cart_store "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/repositories/CartItemRepository.java"
click node_order_service "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/OrderService.java"
click node_order_store "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/repositories/OrderRepository.java"
click node_consumer "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/notification/src/main/java/com/ecom/notification/payload/OrderEventConsumer.java"
click node_notification_app "https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/notification/src/main/java/com/ecom/notification/NotificationApplication.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_gateway,node_jwt,node_fallback,node_discovery,node_config,node_authflow,node_customer toneBlue
class node_product_api,node_product_service,node_product_store toneAmber
class node_user_api,node_user_service,node_user_store,node_keycloak_admin toneMint
class node_cart_api,node_order_api,node_cart_service,node_product_client,node_user_client,node_cart_store,node_order_service,node_order_store toneRose
class node_consumer,node_notification_app,node_keycloak,node_broker toneIndigo
```

## Components

### Access and platform

- [API gateway](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/GatewayConfig.java): `gateway/src/main/java/com/ecom/gateway/GatewayConfig.java`
- [JWT filter](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/JwtAuthFilter.java): `gateway/src/main/java/com/ecom/gateway/JwtAuthFilter.java`
- [Fallback responses](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/gateway/src/main/java/com/ecom/gateway/Fallbackcontroller.java): `gateway/src/main/java/com/ecom/gateway/Fallbackcontroller.java`
- [Service discovery](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/eureka/src/main/java/com/eureka/eureka/EurekaApplication.java): `eureka/src/main/java/com/eureka/eureka/EurekaApplication.java`
- [Config server](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/configserver/configserver/src/main/java/com/ecom/configserver/ConfigserverApplication.java): `configserver/configserver/src/main/java/com/ecom/configserver/ConfigserverApplication.java`
- [Auth flow](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/authFlow/src/main/java/com/ecom/authFlow/HomeController.java): `authFlow/src/main/java/com/ecom/authFlow/HomeController.java`

### Catalog service

- [Product API](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java): `product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java`
- [Product operations](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/services/ProductService.java): `product/src/main/java/com.ecomMicroservices.product/services/ProductService.java`
- [Product records](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/product/src/main/java/com.ecomMicroservices.product/repositories/ProductRepository.java): `product/src/main/java/com.ecomMicroservices.product/repositories/ProductRepository.java`

### User and identity

- [User API](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/controllers/UserController.java): `user/src/main/java/com/ecomMicroservices/user/controllers/UserController.java`
- [User operations](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/services/UserService.java): `user/src/main/java/com/ecomMicroservices/user/services/UserService.java`
- [User records](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/repositories/UserRepository.java): `user/src/main/java/com/ecomMicroservices/user/repositories/UserRepository.java`
- [Keycloak administration](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/user/src/main/java/com/ecomMicroservices/user/services/KeyCloakAdminService.java): `user/src/main/java/com/ecomMicroservices/user/services/KeyCloakAdminService.java`

### Cart and orders

- [Cart API](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/controllers/CartController.java): `order/src/main/java/com/ecomMicroservices/order/controllers/CartController.java`
- [Order API](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/controllers/OrderController.java): `order/src/main/java/com/ecomMicroservices/order/controllers/OrderController.java`
- [Cart operations](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/CartService.java): `order/src/main/java/com/ecomMicroservices/order/services/CartService.java`
- [Product client](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/clients/ProductServiceClient.java): `order/src/main/java/com/ecomMicroservices/order/clients/ProductServiceClient.java`
- [User client](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/clients/UserServiceClient.java): `order/src/main/java/com/ecomMicroservices/order/clients/UserServiceClient.java`
- [Cart records](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/repositories/CartItemRepository.java): `order/src/main/java/com/ecomMicroservices/order/repositories/CartItemRepository.java`
- [Order creation](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/services/OrderService.java): `order/src/main/java/com/ecomMicroservices/order/services/OrderService.java`
- [Order records](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/order/src/main/java/com/ecomMicroservices/order/repositories/OrderRepository.java): `order/src/main/java/com/ecomMicroservices/order/repositories/OrderRepository.java`

### Order notifications

- [Order event consumer](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/notification/src/main/java/com/ecom/notification/payload/OrderEventConsumer.java): `notification/src/main/java/com/ecom/notification/payload/OrderEventConsumer.java`
- [Notification service](https://github.com/ramzy-saad/java-spring-ecomapplicationmicroservicesdemo/blob/master/notification/src/main/java/com/ecom/notification/NotificationApplication.java): `notification/src/main/java/com/ecom/notification/NotificationApplication.java`

### Other components

- **Client**
- **Keycloak**
- **Message broker**

## Connections

- Client → API gateway: sends requests
- API gateway → JWT filter: filters requests
- API gateway → Fallback responses: serves fallback
- API gateway → Cart API: routes requests
- API gateway → Order API: routes requests
- API gateway → Product API: routes requests
- API gateway → User API: routes requests
- Product API → Product operations: delegates to (evidence: `product/src/main/java/com.ecomMicroservices.product/controllers/ProductController.java`)
- Product operations → Product records: reads and writes (evidence: `product/src/main/java/com.ecomMicroservices.product/services/ProductService.java`)
- User API → User operations: delegates to (evidence: `user/src/main/java/com/ecomMicroservices/user/controllers/UserController.java`)
- User operations → User records: reads and writes (evidence: `user/src/main/java/com/ecomMicroservices/user/services/UserService.java`)
- User operations → Keycloak administration: provisions identity (evidence: `user/src/main/java/com/ecomMicroservices/user/services/UserService.java`)
- Keycloak administration → Keycloak: administers users (evidence: `user/src/main/java/com/ecomMicroservices/user/services/KeyCloakAdminService.java`)
- Cart API → Cart operations: delegates to (evidence: `order/src/main/java/com/ecomMicroservices/order/controllers/CartController.java`)
- Order API → Order creation: delegates to (evidence: `order/src/main/java/com/ecomMicroservices/order/controllers/OrderController.java`)
- Cart operations → Product client: fetches product (evidence: `order/src/main/java/com/ecomMicroservices/order/services/CartService.java`)
- Product client → Product API: requests product
- Cart operations → User client: fetches user (evidence: `order/src/main/java/com/ecomMicroservices/order/services/CartService.java`)
- User client → User API: requests user
- Cart operations → Cart records: reads and writes (evidence: `order/src/main/java/com/ecomMicroservices/order/services/CartService.java`)
- Order creation → Cart operations: loads and clears (evidence: `order/src/main/java/com/ecomMicroservices/order/services/OrderService.java`)
- Order creation → Order records: saves order (evidence: `order/src/main/java/com/ecomMicroservices/order/services/OrderService.java`)
- Order creation → Message broker: emits event (evidence: `order/src/main/java/com/ecomMicroservices/order/services/OrderService.java`)
- Message broker → Order event consumer: delivers event
- Order event consumer → Notification service: runs within
- Service discovery → API gateway: supports discovery
- Config server → API gateway: provides configuration
- Config server → Product API: provides configuration
- Auth flow → Keycloak: uses authentication
