# hamilton2959/e_commerce_microservice architecture

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

- Interactive diagram: https://gitdiagram.com/hamilton2959/e_commerce_microservice
- Repository: https://github.com/hamilton2959/e_commerce_microservice

## Overview

This repository is a Java microservices e-commerce application. The main order workflow accepts an order, checks the customer, purchases products, saves the order and its lines, requests payment, and publishes an order confirmation. Product and customer services also expose independent management operations; payment emits a notification, and a notification service handles email and notification persistence. The source index and excerpts support the order and service-layer calls shown; notification-consumer wiring and platform routing details were not sampled, so those connections are omitted.

Main entry points: [`services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java) (Order workflow), [`services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java`](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java) (Payment service), [`services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java`](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java) (Order API), [`services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java`](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java) (Order lines)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_commerce["Order management"]
  node_order_api["Order API"]
  node_order_service["Order workflow<br/>[OrderService.java]"]
  node_order_store["Order records"]
  node_order_lines["Order lines"]
  node_order_line_store["Order line records"]
  node_order_events["Order publisher<br/>[OrderProducer.java]"]
end

subgraph group_catalog["Customer and products"]
  node_customer_api["Customer API"]
  node_customer_service["Customer service"]
  node_customer_store["Customer records"]
  node_customer_client["Customer client"]
  node_product_api["Product API"]
  node_product_service["Product service"]
  node_product_store["Product records"]
  node_product_client["Product client<br/>[ProductClient.java]"]
end

subgraph group_payments["Payment processing"]
  node_payment_client["Payment client<br/>[PaymentClient.java]"]
  node_payment_api["Payment API"]
  node_payment_service["Payment service"]
  node_payment_store["Payment records"]
  node_payment_events["Payment notifier"]
end

subgraph group_notifications["Notifications"]
  node_notification_consumer["Event consumer"]
  node_email_service["Email service<br/>[EmailService.java]"]
  node_notification_store[("Notification records")]
end

subgraph group_platform["Service platform"]
  node_config_server["Config server"]
  node_discovery["Service discovery"]
  node_gateway["API gateway"]
end

node_user(("API client"))

node_user -->|"submits orders"| node_order_api
node_order_api -->|"delegates to"| node_order_service
node_order_service -->|"checks customer"| node_customer_client
node_customer_client -.->|"requests customer"| node_customer_api
node_order_service -->|"purchases products"| node_product_client
node_product_client -->|"posts purchase"| node_product_api
node_product_api -->|"delegates to"| node_product_service
node_order_service -->|"saves order"| node_order_store
node_order_service -->|"saves lines"| node_order_lines
node_order_lines -->|"saves lines"| node_order_line_store
node_order_service -->|"requests payment"| node_payment_client
node_payment_client -.->|"requests payment"| node_payment_api
node_payment_api -->|"delegates to"| node_payment_service
node_payment_service -->|"saves payment"| node_payment_store
node_payment_service -->|"sends notification"| node_payment_events
node_order_service -->|"publishes confirmation"| node_order_events
node_customer_api -->|"delegates to"| node_customer_service
node_customer_service -->|"reads and writes"| node_customer_store
node_product_service -->|"reads and writes"| node_product_store

click node_order_api "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java"
click node_order_service "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java"
click node_order_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderRepository.java"
click node_order_lines "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java"
click node_order_line_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineRepository.java"
click node_order_events "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/kafka/OrderProducer.java"
click node_customer_api "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerController.java"
click node_customer_service "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerService.java"
click node_customer_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerRepository.java"
click node_customer_client "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/customer/CustomerClient.java"
click node_product_api "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductController.java"
click node_product_service "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductService.java"
click node_product_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductRepository.java"
click node_product_client "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/product/ProductClient.java"
click node_payment_client "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/payment/PaymentClient.java"
click node_payment_api "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentController.java"
click node_payment_service "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java"
click node_payment_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentRepository.java"
click node_payment_events "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/notification/NotificationProducer.java"
click node_notification_consumer "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/kafka/NotificationsConsumer.java"
click node_email_service "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/email/EmailService.java"
click node_notification_store "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/notification/NotificationRepository.java"
click node_config_server "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/config-server/src/main/java/com/hamilton/config_server/ConfigServerApplication.java"
click node_discovery "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/discovery/src/main/java/com/hamilton/discovery/DiscoveryApplication.java"
click node_gateway "https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/gateway/src/main/java/com/hamilton/gateway/GatewayApplication.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_order_api,node_order_service,node_order_store,node_order_lines,node_order_line_store,node_order_events,node_user toneBlue
class node_customer_api,node_customer_service,node_customer_store,node_customer_client,node_product_api,node_product_service,node_product_store,node_product_client toneAmber
class node_payment_client,node_payment_api,node_payment_service,node_payment_store,node_payment_events toneMint
class node_notification_consumer,node_email_service,node_notification_store toneRose
class node_config_server,node_discovery,node_gateway toneIndigo
```

## Components

### Order management

- [Order API](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java): `services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java`
- [Order workflow](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java): `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`
- [Order records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/order/OrderRepository.java): `services/order/src/main/java/com/hamilton/e_commerce/order/OrderRepository.java`
- [Order lines](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java): `services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java`
- [Order line records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineRepository.java): `services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineRepository.java`
- [Order publisher](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/kafka/OrderProducer.java): `services/order/src/main/java/com/hamilton/e_commerce/kafka/OrderProducer.java`

### Customer and products

- [Customer API](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerController.java): `services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerController.java`
- [Customer service](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerService.java): `services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerService.java`
- [Customer records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerRepository.java): `services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerRepository.java`
- [Customer client](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/customer/CustomerClient.java): `services/order/src/main/java/com/hamilton/e_commerce/customer/CustomerClient.java`
- [Product API](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductController.java): `services/product/src/main/java/com/hamilton/ecommerce/product/ProductController.java`
- [Product service](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductService.java): `services/product/src/main/java/com/hamilton/ecommerce/product/ProductService.java`
- [Product records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/product/src/main/java/com/hamilton/ecommerce/product/ProductRepository.java): `services/product/src/main/java/com/hamilton/ecommerce/product/ProductRepository.java`
- [Product client](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/product/ProductClient.java): `services/order/src/main/java/com/hamilton/e_commerce/product/ProductClient.java`

### Payment processing

- [Payment client](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/order/src/main/java/com/hamilton/e_commerce/payment/PaymentClient.java): `services/order/src/main/java/com/hamilton/e_commerce/payment/PaymentClient.java`
- [Payment API](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentController.java): `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentController.java`
- [Payment service](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java): `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java`
- [Payment records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentRepository.java): `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentRepository.java`
- [Payment notifier](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/payment/src/main/java/com/hamilton/e_commerce/notification/NotificationProducer.java): `services/payment/src/main/java/com/hamilton/e_commerce/notification/NotificationProducer.java`

### Notifications

- [Event consumer](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/kafka/NotificationsConsumer.java): `services/notification/src/main/java/com/hamilton/e_commerce/kafka/NotificationsConsumer.java`
- [Email service](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/email/EmailService.java): `services/notification/src/main/java/com/hamilton/e_commerce/email/EmailService.java`
- [Notification records](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/notification/src/main/java/com/hamilton/e_commerce/notification/NotificationRepository.java): `services/notification/src/main/java/com/hamilton/e_commerce/notification/NotificationRepository.java`

### Service platform

- [Config server](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/config-server/src/main/java/com/hamilton/config_server/ConfigServerApplication.java): `services/config-server/src/main/java/com/hamilton/config_server/ConfigServerApplication.java`
- [Service discovery](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/discovery/src/main/java/com/hamilton/discovery/DiscoveryApplication.java): `services/discovery/src/main/java/com/hamilton/discovery/DiscoveryApplication.java`
- [API gateway](https://github.com/hamilton2959/e_commerce_microservice/blob/master/services/gateway/src/main/java/com/hamilton/gateway/GatewayApplication.java): `services/gateway/src/main/java/com/hamilton/gateway/GatewayApplication.java`

### Other components

- **API client**

## Connections

- API client → Order API: submits orders (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java`)
- Order API → Order workflow: delegates to (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderController.java`)
- Order workflow → Customer client: checks customer (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Customer client → Customer API: requests customer
- Order workflow → Product client: purchases products (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Product client → Product API: posts purchase (evidence: `services/order/src/main/java/com/hamilton/e_commerce/product/ProductClient.java`)
- Product API → Product service: delegates to (evidence: `services/product/src/main/java/com/hamilton/ecommerce/product/ProductController.java`)
- Order workflow → Order records: saves order (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Order workflow → Order lines: saves lines (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Order lines → Order line records: saves lines (evidence: `services/order/src/main/java/com/hamilton/e_commerce/orderline/OrderLineService.java`)
- Order workflow → Payment client: requests payment (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Payment client → Payment API: requests payment
- Payment API → Payment service: delegates to (evidence: `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentController.java`)
- Payment service → Payment records: saves payment (evidence: `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java`)
- Payment service → Payment notifier: sends notification (evidence: `services/payment/src/main/java/com/hamilton/e_commerce/payment/PaymentService.java`)
- Order workflow → Order publisher: publishes confirmation (evidence: `services/order/src/main/java/com/hamilton/e_commerce/order/OrderService.java`)
- Customer API → Customer service: delegates to (evidence: `services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerController.java`)
- Customer service → Customer records: reads and writes (evidence: `services/customer/src/main/java/com/hamilton/e_commerce/customer/CustomerService.java`)
- Product service → Product records: reads and writes (evidence: `services/product/src/main/java/com/hamilton/ecommerce/product/ProductService.java`)
