# ivaneliseodev/microservices-ecommerce architecture

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

- Interactive diagram: https://gitdiagram.com/ivaneliseodev/microservices-ecommerce
- Repository: https://github.com/ivaneliseodev/microservices-ecommerce

## Overview

This is a Spring Boot e-commerce microservices platform. The principal workflow places an order: the order API delegates to order processing, which checks inventory synchronously for each line before persisting and returning the order. Product catalog management and inventory administration are separate service workflows; the README also describes RabbitMQ notifications and Eureka discovery. The order implementation excerpt confirms the inventory call, while notification and discovery links are documented capabilities rather than inspected implementation details.

Main entry points: [`order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java) (Order service), [`product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java`](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java) (Catalog service), [`inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java`](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java) (Inventory service), [`product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java`](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java) (Product repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Product catalog"]
  node_product_api["Product API"]
  node_product_logic["Catalog service"]
  node_product_mapper["Product mapper<br/>[ProductMapper.java]"]
  node_product_store[("Product repository")]
  node_product_data["Product model<br/>[Product.java]"]
  node_product_dataloader["Sample data loader"]
end

subgraph group_orders["Order processing"]
  node_order_api["Order API"]
  node_order_logic["Order service"]
  node_order_mapper["Order mapper<br/>[OrderMapper.java]"]
  node_order_store[("Order repository")]
  node_order_model[("Order records<br/>[Order.java]")]
end

subgraph group_stock["Inventory"]
  node_inventory_api["Inventory API"]
  node_inventory_logic["Inventory service"]
  node_inventory_mapper["Inventory mapper"]
  node_inventory_store[("Inventory repository")]
  node_inventory_model[("Inventory record<br/>[Inventory.java]")]
end

subgraph group_platform["Platform services"]
  node_eureka["Eureka registry"]
  node_notifier["Notification service"]
  node_rabbit["RabbitMQ"]
end

node_shopper(("Client"))

node_shopper -->|"requests catalog"| node_product_api
node_product_api -->|"delegates to"| node_product_logic
node_product_logic -->|"maps data"| node_product_mapper
node_product_logic -->|"reads and writes"| node_product_store
node_product_mapper -->|"maps model"| node_product_data
node_product_store -->|"stores"| node_product_data
node_product_dataloader -->|"loads sample data"| node_product_store
node_shopper -->|"places order"| node_order_api
node_order_api -->|"delegates to"| node_order_logic
node_order_logic -->|"maps line items"| node_order_mapper
node_order_logic -->|"checks stock"| node_inventory_api
node_order_logic -->|"saves and reads"| node_order_store
node_order_mapper -->|"maps order data"| node_order_model
node_order_store -->|"persists"| node_order_model
node_shopper -->|"manages stock"| node_inventory_api
node_inventory_api -->|"delegates to"| node_inventory_logic
node_inventory_logic -->|"maps records"| node_inventory_mapper
node_inventory_logic -->|"reads and writes"| node_inventory_store
node_inventory_mapper -->|"maps model"| node_inventory_model
node_inventory_store -->|"persists"| node_inventory_model
node_order_logic -.->|"publishes order event"| node_rabbit
node_rabbit -.->|"delivers event"| node_notifier
node_eureka -.->|"supports discovery"| node_order_logic

click node_product_api "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/controller/ProductController.java"
click node_product_logic "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java"
click node_product_mapper "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/mapper/ProductMapper.java"
click node_product_store "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java"
click node_product_data "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/dto/Product.java"
click node_product_dataloader "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/dataloader/TestDataLoader.java"
click node_order_api "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/controller/OrderController.java"
click node_order_logic "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java"
click node_order_mapper "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/mapper/OrderMapper.java"
click node_order_store "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/repository/OrderRepository.java"
click node_order_model "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/model/Order.java"
click node_inventory_api "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/controller/InventoryController.java"
click node_inventory_logic "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java"
click node_inventory_mapper "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/mapper/InventoryMapper.java"
click node_inventory_store "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/repository/InventoryRepository.java"
click node_inventory_model "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/model/Inventory.java"
click node_eureka "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/discovery-server/src/main/java/com/ecommerce/discovery_server/DiscoveryServerApplication.java"
click node_notifier "https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/notification-service/src/main/java/com/ecommerce/notification_service/NotificationServiceApplication.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_product_api,node_product_logic,node_product_mapper,node_product_store,node_product_data,node_product_dataloader,node_shopper toneBlue
class node_order_api,node_order_logic,node_order_mapper,node_order_store,node_order_model toneAmber
class node_inventory_api,node_inventory_logic,node_inventory_mapper,node_inventory_store,node_inventory_model toneMint
class node_eureka,node_notifier,node_rabbit toneRose
```

## Components

### Product catalog

- [Product API](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/controller/ProductController.java): `product-service/src/main/java/com/ecommerce/product_service/controller/ProductController.java`
- [Catalog service](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java): `product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java`
- [Product mapper](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/mapper/ProductMapper.java): `product-service/src/main/java/com/ecommerce/product_service/mapper/ProductMapper.java`
- [Product repository](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java): `product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java`
- [Product model](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/dto/Product.java): `product-service/src/main/java/com/ecommerce/product_service/dto/Product.java`
- [Sample data loader](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/product-service/src/main/java/com/ecommerce/product_service/dataloader/TestDataLoader.java): `product-service/src/main/java/com/ecommerce/product_service/dataloader/TestDataLoader.java`

### Order processing

- [Order API](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/controller/OrderController.java): `order-service/src/main/java/com/ecommerce/order_service/controller/OrderController.java`
- [Order service](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java): `order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`
- [Order mapper](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/mapper/OrderMapper.java): `order-service/src/main/java/com/ecommerce/order_service/mapper/OrderMapper.java`
- [Order repository](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/repository/OrderRepository.java): `order-service/src/main/java/com/ecommerce/order_service/repository/OrderRepository.java`
- [Order records](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/order-service/src/main/java/com/ecommerce/order_service/model/Order.java): `order-service/src/main/java/com/ecommerce/order_service/model/Order.java`

### Inventory

- [Inventory API](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/controller/InventoryController.java): `inventory-service/src/main/java/com/ecommerce/inventory_service/controller/InventoryController.java`
- [Inventory service](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java): `inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java`
- [Inventory mapper](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/mapper/InventoryMapper.java): `inventory-service/src/main/java/com/ecommerce/inventory_service/mapper/InventoryMapper.java`
- [Inventory repository](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/repository/InventoryRepository.java): `inventory-service/src/main/java/com/ecommerce/inventory_service/repository/InventoryRepository.java`
- [Inventory record](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/inventory-service/src/main/java/com/ecommerce/inventory_service/model/Inventory.java): `inventory-service/src/main/java/com/ecommerce/inventory_service/model/Inventory.java`

### Platform services

- [Eureka registry](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/discovery-server/src/main/java/com/ecommerce/discovery_server/DiscoveryServerApplication.java): `discovery-server/src/main/java/com/ecommerce/discovery_server/DiscoveryServerApplication.java`
- [Notification service](https://github.com/ivaneliseodev/microservices-ecommerce/blob/main/notification-service/src/main/java/com/ecommerce/notification_service/NotificationServiceApplication.java): `notification-service/src/main/java/com/ecommerce/notification_service/NotificationServiceApplication.java`
- **RabbitMQ**

### Other components

- **Client**

## Connections

- Client → Product API: requests catalog (evidence: `product-service/src/main/java/com/ecommerce/product_service/controller/ProductController.java`)
- Product API → Catalog service: delegates to (evidence: `product-service/src/main/java/com/ecommerce/product_service/controller/ProductController.java`)
- Catalog service → Product mapper: maps data (evidence: `product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java`)
- Catalog service → Product repository: reads and writes (evidence: `product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java`)
- Product mapper → Product model: maps model (evidence: `product-service/src/main/java/com/ecommerce/product_service/service/impl/ProductServiceImpl.java`)
- Product repository → Product model: stores (evidence: `product-service/src/main/java/com/ecommerce/product_service/repository/ProductRepository.java`)
- Sample data loader → Product repository: loads sample data (evidence: `product-service/src/main/java/com/ecommerce/product_service/dataloader/TestDataLoader.java`)
- Client → Order API: places order (evidence: `order-service/src/main/java/com/ecommerce/order_service/controller/OrderController.java`)
- Order API → Order service: delegates to (evidence: `order-service/src/main/java/com/ecommerce/order_service/controller/OrderController.java`)
- Order service → Order mapper: maps line items (evidence: `order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`)
- Order service → Inventory API: checks stock (evidence: `order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`)
- Order service → Order repository: saves and reads (evidence: `order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`)
- Order mapper → Order records: maps order data (evidence: `order-service/src/main/java/com/ecommerce/order_service/service/impl/OrderServiceImpl.java`)
- Order repository → Order records: persists (evidence: `order-service/src/main/java/com/ecommerce/order_service/repository/OrderRepository.java`)
- Client → Inventory API: manages stock (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/controller/InventoryController.java`)
- Inventory API → Inventory service: delegates to (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/controller/InventoryController.java`)
- Inventory service → Inventory mapper: maps records (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java`)
- Inventory service → Inventory repository: reads and writes (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java`)
- Inventory mapper → Inventory record: maps model (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/service/impl/InventoryServiceImpl.java`)
- Inventory repository → Inventory record: persists (evidence: `inventory-service/src/main/java/com/ecommerce/inventory_service/repository/InventoryRepository.java`)
- Order service → RabbitMQ: publishes order event (evidence: `README.md`)
- RabbitMQ → Notification service: delivers event (evidence: `README.md`)
- Eureka registry → Order service: supports discovery (evidence: `README.md`)
