# taranjotwani/kafka-test architecture

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

- Interactive diagram: https://gitdiagram.com/taranjotwani/kafka-test
- Repository: https://github.com/taranjotwani/kafka-test

## Overview

This is a Kafka-based order-processing microservice demo. A client submits or generates orders through the order-service API; payment and stock services independently reserve funds and inventory, then publish outcomes that the order service uses to confirm, reject, or roll back the order. The services share an Order event model and persist their own customer and product state. The README describes the event-driven architecture; order-service stream wiring is not excerpted, so links involving its coordination are marked unverified.

Main entry points: [`order-service/src/main/java/pl/piomin/order/controller/OrderController.java`](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/controller/OrderController.java) (Order API), [`order-service/src/main/java/pl/piomin/order/OrderApp.java`](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/OrderApp.java) (Order Streams), [`payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java`](https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java) (Funds Reservation), [`stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java`](https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java) (Inventory Reservation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orders["Order Processing"]
  node_controller["Order API"]
  node_generator["Order Generator"]
  node_coordination["Order Coordination"]
  node_streaming["Order Streams<br/>[OrderApp.java]"]
  node_orderread[("Order Read Store")]
end

subgraph group_payment["Payment Service"]
  node_paymentapp["Payment Listener<br/>[PaymentApp.java]"]
  node_paymentlogic["Funds Reservation"]
  node_customerrepo["Customer Repository"]
  node_customer[("Customer Balance<br/>[Customer.java]")]
end

subgraph group_stock["Stock Service"]
  node_stockapp["Stock Listener<br/>[StockApp.java]"]
  node_stocklogic["Inventory Reservation"]
  node_productrepo["Product Repository"]
  node_product[("Product Inventory<br/>[Product.java]")]
end

subgraph group_shared["Events and Messaging"]
  node_event["Order Event<br/>[Order.java]"]
  node_kafka["Kafka Broker"]
end

node_client(("API Client"))

node_client -->|"submits orders"| node_controller
node_controller -->|"starts generation"| node_generator
node_controller -->|"publishes orders"| node_kafka
node_generator -->|"publishes orders"| node_kafka
node_controller -->|"queries orders"| node_orderread
node_kafka -->|"delivers events"| node_paymentapp
node_paymentapp -->|"dispatches events"| node_paymentlogic
node_paymentlogic -->|"reads and saves"| node_customerrepo
node_customerrepo -->|"manages entities"| node_customer
node_paymentlogic -->|"publishes outcomes"| node_kafka
node_kafka -->|"delivers events"| node_stockapp
node_stockapp -->|"dispatches events"| node_stocklogic
node_stocklogic -->|"reads and saves"| node_productrepo
node_productrepo -->|"manages entities"| node_product
node_stocklogic -->|"publishes outcomes"| node_kafka
node_streaming -.->|"uses coordination"| node_coordination
node_kafka -.->|"routes outcomes"| node_streaming
node_streaming -.->|"maintains read state"| node_orderread

click node_controller "https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/controller/OrderController.java"
click node_generator "https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/service/OrderGeneratorService.java"
click node_coordination "https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/service/OrderManageService.java"
click node_streaming "https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/OrderApp.java"
click node_orderread "https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/controller/OrderController.java"
click node_paymentapp "https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/PaymentApp.java"
click node_paymentlogic "https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java"
click node_customerrepo "https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/repository/CustomerRepository.java"
click node_customer "https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/domain/Customer.java"
click node_stockapp "https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/StockApp.java"
click node_stocklogic "https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java"
click node_productrepo "https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/repository/ProductRepository.java"
click node_product "https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/domain/Product.java"
click node_event "https://github.com/taranjotwani/kafka-test/blob/main/base-domain/src/main/java/pl/piomin/base/domain/Order.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_controller,node_generator,node_coordination,node_streaming,node_orderread,node_client toneBlue
class node_paymentapp,node_paymentlogic,node_customerrepo,node_customer toneAmber
class node_stockapp,node_stocklogic,node_productrepo,node_product toneMint
class node_event,node_kafka toneRose
```

## Components

### Order Processing

- [Order API](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/controller/OrderController.java): `order-service/src/main/java/pl/piomin/order/controller/OrderController.java`
- [Order Generator](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/service/OrderGeneratorService.java): `order-service/src/main/java/pl/piomin/order/service/OrderGeneratorService.java`
- [Order Coordination](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/service/OrderManageService.java): `order-service/src/main/java/pl/piomin/order/service/OrderManageService.java`
- [Order Streams](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/OrderApp.java): `order-service/src/main/java/pl/piomin/order/OrderApp.java`
- [Order Read Store](https://github.com/taranjotwani/kafka-test/blob/main/order-service/src/main/java/pl/piomin/order/controller/OrderController.java): `order-service/src/main/java/pl/piomin/order/controller/OrderController.java`

### Payment Service

- [Payment Listener](https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/PaymentApp.java): `payment-service/src/main/java/pl/piomin/payment/PaymentApp.java`
- [Funds Reservation](https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java): `payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java`
- [Customer Repository](https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/repository/CustomerRepository.java): `payment-service/src/main/java/pl/piomin/payment/repository/CustomerRepository.java`
- [Customer Balance](https://github.com/taranjotwani/kafka-test/blob/main/payment-service/src/main/java/pl/piomin/payment/domain/Customer.java): `payment-service/src/main/java/pl/piomin/payment/domain/Customer.java`

### Stock Service

- [Stock Listener](https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/StockApp.java): `stock-service/src/main/java/pl/piomin/stock/StockApp.java`
- [Inventory Reservation](https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java): `stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java`
- [Product Repository](https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/repository/ProductRepository.java): `stock-service/src/main/java/pl/piomin/stock/repository/ProductRepository.java`
- [Product Inventory](https://github.com/taranjotwani/kafka-test/blob/main/stock-service/src/main/java/pl/piomin/stock/domain/Product.java): `stock-service/src/main/java/pl/piomin/stock/domain/Product.java`

### Events and Messaging

- [Order Event](https://github.com/taranjotwani/kafka-test/blob/main/base-domain/src/main/java/pl/piomin/base/domain/Order.java): `base-domain/src/main/java/pl/piomin/base/domain/Order.java`
- **Kafka Broker**

### Other components

- **API Client**

## Connections

- API Client → Order API: submits orders (evidence: `readme.md`)
- Order API → Order Generator: starts generation (evidence: `order-service/src/main/java/pl/piomin/order/controller/OrderController.java`)
- Order API → Kafka Broker: publishes orders (evidence: `order-service/src/main/java/pl/piomin/order/controller/OrderController.java`)
- Order Generator → Kafka Broker: publishes orders (evidence: `order-service/src/main/java/pl/piomin/order/service/OrderGeneratorService.java`)
- Order API → Order Read Store: queries orders (evidence: `order-service/src/main/java/pl/piomin/order/controller/OrderController.java`)
- Kafka Broker → Payment Listener: delivers events (evidence: `payment-service/src/main/java/pl/piomin/payment/PaymentApp.java`)
- Payment Listener → Funds Reservation: dispatches events (evidence: `payment-service/src/main/java/pl/piomin/payment/PaymentApp.java`)
- Funds Reservation → Customer Repository: reads and saves (evidence: `payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java`)
- Customer Repository → Customer Balance: manages entities (evidence: `payment-service/src/main/java/pl/piomin/payment/repository/CustomerRepository.java`)
- Funds Reservation → Kafka Broker: publishes outcomes (evidence: `payment-service/src/main/java/pl/piomin/payment/service/OrderManageService.java`)
- Kafka Broker → Stock Listener: delivers events (evidence: `stock-service/src/main/java/pl/piomin/stock/StockApp.java`)
- Stock Listener → Inventory Reservation: dispatches events (evidence: `stock-service/src/main/java/pl/piomin/stock/StockApp.java`)
- Inventory Reservation → Product Repository: reads and saves (evidence: `stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java`)
- Product Repository → Product Inventory: manages entities (evidence: `stock-service/src/main/java/pl/piomin/stock/repository/ProductRepository.java`)
- Inventory Reservation → Kafka Broker: publishes outcomes (evidence: `stock-service/src/main/java/pl/piomin/stock/service/OrderManageService.java`)
- Order Streams → Order Coordination: uses coordination (evidence: `order-service/src/main/java/pl/piomin/order/OrderApp.java`)
- Kafka Broker → Order Streams: routes outcomes
- Order Streams → Order Read Store: maintains read state (evidence: `order-service/src/main/java/pl/piomin/order/OrderApp.java`)
