# manogna-595/order-processing-service architecture

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

- Interactive diagram: https://gitdiagram.com/manogna-595/order-processing-service
- Repository: https://github.com/manogna-595/order-processing-service

## Overview

This is a reactive order-processing microservice whose principal workflow accepts an order through its API, runs the order saga across validation, payment, stock, and delivery stages, and completes or compensates the transaction. The README also describes event publication with an outbox, resilience patterns, and monitoring. The supplied source excerpt is a separate SonarQube fixer, so runtime call wiring is not directly verified; links below rely on README-level flow and documented capabilities, and omit uncertain internal calls.

Main entry points: [`order-service/src/main/java/com/example/order/service/SagaOrchestrator.java`](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/SagaOrchestrator.java) (Saga orchestrator), [`order-service/src/main/java/com/example/order/service/OrderServiceAtLeastOnceImpl.java`](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/OrderServiceAtLeastOnceImpl.java) (Order service), [`order-service/src/main/java/com/example/order/service/EventPublisher.java`](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/EventPublisher.java) (Event publisher), [`order-service/src/main/java/com/example/order/config/MetricsConfig.java`](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/config/MetricsConfig.java) (Health and metrics)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Order API"]
  node_controller["Order controller"]
  node_orderservice["Order service"]
  node_validation["Order validation"]
end

subgraph group_saga["Order Saga"]
  node_order["Order state"]
  node_sagaorch["Saga orchestrator"]
  node_payment["Payment stage"]
  node_inventory["Stock stage"]
  node_delivery["Shipping and delivery"]
  node_compensation["Compensation manager"]
end

subgraph group_events["Events And Recovery"]
  node_eventpub["Event publisher"]
  node_eventtypes["Order events<br/>[OrderEvent.java]"]
  node_dlq["Dead-letter handling"]
end

subgraph group_data["Persistence And Monitoring"]
  node_mysql[("MySQL")]
  node_orderrepo["Order repository"]
  node_redis[("Redis streams")]
  node_eventrepo["Event repository"]
  node_monitoring["Health and metrics<br/>[MetricsConfig.java]"]
end

node_customer(("Order client"))

node_customer -->|"submits order"| node_controller
node_controller -->|"delegates request"| node_orderservice
node_orderservice -->|"validates order"| node_validation
node_orderservice -->|"starts saga"| node_sagaorch
node_sagaorch -->|"advances state"| node_order
node_sagaorch -->|"runs payment"| node_payment
node_sagaorch -->|"checks stock"| node_inventory
node_sagaorch -->|"runs delivery"| node_delivery
node_sagaorch -->|"compensates failures"| node_compensation
node_orderservice -->|"persists orders"| node_orderrepo
node_orderrepo -->|"reads and writes"| node_mysql
node_eventpub -->|"publishes"| node_eventtypes
node_eventpub -->|"writes event stream"| node_redis
node_eventpub -->|"uses outbox"| node_eventrepo
node_eventrepo -->|"persists events"| node_mysql
node_dlq -.->|"handles failed events"| node_redis
node_monitoring -.->|"monitors service"| node_mysql
node_monitoring -.->|"checks health"| node_redis

click node_controller "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/controller/OrderController.java"
click node_orderservice "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/OrderServiceAtLeastOnceImpl.java"
click node_validation "https://github.com/manogna-595/order-processing-service/tree/main/order-service/src/main/java/com/example/order/service"
click node_order "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/domain/OrderStateMachine.java"
click node_sagaorch "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/SagaOrchestrator.java"
click node_payment "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/PaymentService.java"
click node_inventory "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/InventoryServiceImpl.java"
click node_delivery "https://github.com/manogna-595/order-processing-service/tree/main/order-service/src/main/java/com/example/order/service"
click node_compensation "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/CompensationManagerImpl.java"
click node_eventpub "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/EventPublisher.java"
click node_eventtypes "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/events/OrderEvent.java"
click node_dlq "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/DLQManagerImpl.java"
click node_orderrepo "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/repository/orders/OrderRepositoryImpl.java"
click node_eventrepo "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/repository/CompositeEventRepository.java"
click node_monitoring "https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/config/MetricsConfig.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_orderservice,node_validation,node_customer toneBlue
class node_order,node_sagaorch,node_payment,node_inventory,node_delivery,node_compensation toneAmber
class node_eventpub,node_eventtypes,node_dlq toneMint
class node_mysql,node_orderrepo,node_redis,node_eventrepo,node_monitoring toneRose
```

## Components

### Order API

- [Order controller](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/controller/OrderController.java): `order-service/src/main/java/com/example/order/controller/OrderController.java`
- [Order service](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/OrderServiceAtLeastOnceImpl.java): `order-service/src/main/java/com/example/order/service/OrderServiceAtLeastOnceImpl.java`
- [Order validation](https://github.com/manogna-595/order-processing-service/tree/main/order-service/src/main/java/com/example/order/service): `order-service/src/main/java/com/example/order/service`

### Order Saga

- [Order state](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/domain/OrderStateMachine.java): `order-service/src/main/java/com/example/order/domain/OrderStateMachine.java`
- [Saga orchestrator](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/SagaOrchestrator.java): `order-service/src/main/java/com/example/order/service/SagaOrchestrator.java`
- [Payment stage](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/PaymentService.java): `order-service/src/main/java/com/example/order/service/PaymentService.java`
- [Stock stage](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/InventoryServiceImpl.java): `order-service/src/main/java/com/example/order/service/InventoryServiceImpl.java`
- [Shipping and delivery](https://github.com/manogna-595/order-processing-service/tree/main/order-service/src/main/java/com/example/order/service): `order-service/src/main/java/com/example/order/service`
- [Compensation manager](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/CompensationManagerImpl.java): `order-service/src/main/java/com/example/order/service/CompensationManagerImpl.java`

### Events And Recovery

- [Event publisher](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/EventPublisher.java): `order-service/src/main/java/com/example/order/service/EventPublisher.java`
- [Order events](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/events/OrderEvent.java): `order-service/src/main/java/com/example/order/events/OrderEvent.java`
- [Dead-letter handling](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/service/DLQManagerImpl.java): `order-service/src/main/java/com/example/order/service/DLQManagerImpl.java`

### Persistence And Monitoring

- **MySQL**
- [Order repository](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/repository/orders/OrderRepositoryImpl.java): `order-service/src/main/java/com/example/order/repository/orders/OrderRepositoryImpl.java`
- **Redis streams**
- [Event repository](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/repository/CompositeEventRepository.java): `order-service/src/main/java/com/example/order/repository/CompositeEventRepository.java`
- [Health and metrics](https://github.com/manogna-595/order-processing-service/blob/main/order-service/src/main/java/com/example/order/config/MetricsConfig.java): `order-service/src/main/java/com/example/order/config/MetricsConfig.java`

### Other components

- **Order client**

## Connections

- Order client → Order controller: submits order
- Order controller → Order service: delegates request
- Order service → Order validation: validates order
- Order service → Saga orchestrator: starts saga
- Saga orchestrator → Order state: advances state
- Saga orchestrator → Payment stage: runs payment
- Saga orchestrator → Stock stage: checks stock
- Saga orchestrator → Shipping and delivery: runs delivery
- Saga orchestrator → Compensation manager: compensates failures
- Order service → Order repository: persists orders
- Order repository → MySQL: reads and writes
- Event publisher → Order events: publishes
- Event publisher → Redis streams: writes event stream
- Event publisher → Event repository: uses outbox
- Event repository → MySQL: persists events
- Dead-letter handling → Redis streams: handles failed events
- Health and metrics → MySQL: monitors service
- Health and metrics → Redis streams: checks health
