# natooa/order_management_microservices_system architecture

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

- Interactive diagram: https://gitdiagram.com/natooa/order_management_microservices_system
- Repository: https://github.com/natooa/order_management_microservices_system

## Overview

This repository is a multi-service order-management system. Its principal workflow begins with an order request, with product pricing and inventory reservation represented as distinct domain stages; order events then support payment processing and order confirmation or cancellation. Product catalog management, inventory administration and reservations, payment/refunds, and shipment-related event types are additional capabilities. Source excerpts confirm several entry points and the outbox publishing path, but do not show the full order, reservation, payment, or shipping wiring; uncertain links are omitted.

Main entry points: [`payment-service/src/main/java/kz/natooa/Payment/PaymentService.java`](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentService.java) (Payment service), [`product-service/src/main/java/kz/natooa/product/ProductService.java`](https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductService.java) (Product service), [`order-service/src/main/java/kz/natooa/outbox/OrderPollerService.java`](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/outbox/OrderPollerService.java) (Outbox poller), [`order-service/src/main/java/kz/natooa/order/OrderController.java`](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrderController.java) (Order API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orders["Order lifecycle"]
  node_order_api["Order API"]
  node_order_service["Order service<br/>[OrdersService.java]"]
  node_order_store[("Orders store")]
  node_pricing["Price calculation"]
end

subgraph group_catalog["Catalog and inventory"]
  node_product_client["Product gRPC client"]
  node_product_api["Product API"]
  node_product_service["Product service"]
  node_product_store[("Product store")]
  node_product_grpc["Product gRPC service"]
  node_inventory_api["Inventory API"]
  node_inventory_service["Inventory service"]
  node_inventory_store[("Inventory store")]
  node_reservation_service["Reservation service"]
  node_reservation_grpc["Reservation gRPC"]
  node_reservation_store[("Reservation store")]
end

subgraph group_payments["Payment processing"]
  node_payment_handler["Order event handler"]
  node_dedup["Event deduplication"]
  node_payment_service["Payment service"]
  node_provider_factory["Provider factory"]
  node_payment_provider["Payment provider"]
  node_payment_store[("Payment store")]
  node_refund_store[("Refund store")]
  node_processed_store[("Processed messages")]
end

subgraph group_events["Events and messaging"]
  node_order_poller["Outbox poller"]
  node_outbox_store[("Outbox store")]
  node_payment_publisher["Payment event publisher"]
  node_domain_events["Domain event types<br/>[DomainEvent.java]"]
  node_shipping_app["Shipping service<br/>[App.java]"]
end

node_buyer(("Order client"))
node_kafka["Kafka"]

node_buyer -->|"submits order"| node_order_api
node_order_api -->|"creates order"| node_order_service
node_pricing -->|"fetches product"| node_product_client
node_product_api -->|"delegates requests"| node_product_service
node_product_service -->|"accesses products"| node_product_store
node_product_grpc -->|"serves product data"| node_product_service
node_inventory_api -->|"delegates update"| node_inventory_service
node_inventory_service -->|"accesses inventory"| node_inventory_store
node_reservation_grpc -->|"handles reservations"| node_reservation_service
node_reservation_service -->|"accesses reservations"| node_reservation_store
node_payment_handler -->|"marks events"| node_dedup
node_dedup -->|"records event IDs"| node_processed_store
node_payment_service -->|"selects provider"| node_provider_factory
node_provider_factory -->|"creates provider"| node_payment_provider
node_payment_service -->|"stores payments"| node_payment_store
node_payment_service -->|"stores refunds"| node_refund_store
node_order_poller -->|"reads and updates"| node_outbox_store
node_order_poller -->|"publishes events"| node_kafka

click node_order_api "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrderController.java"
click node_order_service "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrdersService.java"
click node_order_store "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrdersRepository.java"
click node_pricing "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/grpc/PricingService.java"
click node_product_client "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/grpc/ProductGrpcClient.java"
click node_product_api "https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductController.java"
click node_product_service "https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductService.java"
click node_product_store "https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductRepository.java"
click node_product_grpc "https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductServiceGrpcImpl.java"
click node_inventory_api "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryController.java"
click node_inventory_service "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryService.java"
click node_inventory_store "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryRepository.java"
click node_reservation_service "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationService.java"
click node_reservation_grpc "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationServiceGrpcImpl.java"
click node_reservation_store "https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationRepository.java"
click node_payment_handler "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/OrderEventHandler.java"
click node_dedup "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/DeduplicationService.java"
click node_payment_service "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentService.java"
click node_provider_factory "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentProviderFactory.java"
click node_payment_provider "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentProvider.java"
click node_payment_store "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentRepository.java"
click node_refund_store "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentRefundRepository.java"
click node_processed_store "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/processed/ProcessedMessageRepository.java"
click node_order_poller "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/outbox/OrderPollerService.java"
click node_outbox_store "https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/outbox/OutboxRepository.java"
click node_payment_publisher "https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/PaymentEventPublisher.java"
click node_domain_events "https://github.com/natooa/order_management_microservices_system/blob/main/common/src/main/java/kz/natooa/events/DomainEvent.java"
click node_shipping_app "https://github.com/natooa/order_management_microservices_system/blob/main/shipping-service/src/main/java/kz/natooa/App.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_pricing,node_buyer toneBlue
class node_product_client,node_product_api,node_product_service,node_product_store,node_product_grpc,node_inventory_api,node_inventory_service,node_inventory_store,node_reservation_service,node_reservation_grpc,node_reservation_store toneAmber
class node_payment_handler,node_dedup,node_payment_service,node_provider_factory,node_payment_provider,node_payment_store,node_refund_store,node_processed_store toneMint
class node_order_poller,node_outbox_store,node_payment_publisher,node_domain_events,node_shipping_app toneRose
class node_kafka toneIndigo
```

## Components

### Order lifecycle

- [Order API](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrderController.java): `order-service/src/main/java/kz/natooa/order/OrderController.java`
- [Order service](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrdersService.java): `order-service/src/main/java/kz/natooa/order/OrdersService.java`
- [Orders store](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/order/OrdersRepository.java): `order-service/src/main/java/kz/natooa/order/OrdersRepository.java`
- [Price calculation](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/grpc/PricingService.java): `order-service/src/main/java/kz/natooa/grpc/PricingService.java`

### Catalog and inventory

- [Product gRPC client](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/grpc/ProductGrpcClient.java): `order-service/src/main/java/kz/natooa/grpc/ProductGrpcClient.java`
- [Product API](https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductController.java): `product-service/src/main/java/kz/natooa/product/ProductController.java`
- [Product service](https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductService.java): `product-service/src/main/java/kz/natooa/product/ProductService.java`
- [Product store](https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductRepository.java): `product-service/src/main/java/kz/natooa/product/ProductRepository.java`
- [Product gRPC service](https://github.com/natooa/order_management_microservices_system/blob/main/product-service/src/main/java/kz/natooa/product/ProductServiceGrpcImpl.java): `product-service/src/main/java/kz/natooa/product/ProductServiceGrpcImpl.java`
- [Inventory API](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryController.java): `inventory-service/src/main/java/kz/natooa/inventory/InventoryController.java`
- [Inventory service](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryService.java): `inventory-service/src/main/java/kz/natooa/inventory/InventoryService.java`
- [Inventory store](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/inventory/InventoryRepository.java): `inventory-service/src/main/java/kz/natooa/inventory/InventoryRepository.java`
- [Reservation service](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationService.java): `inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationService.java`
- [Reservation gRPC](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationServiceGrpcImpl.java): `inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationServiceGrpcImpl.java`
- [Reservation store](https://github.com/natooa/order_management_microservices_system/blob/main/inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationRepository.java): `inventory-service/src/main/java/kz/natooa/reservations/InventoryReservationRepository.java`

### Payment processing

- [Order event handler](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/OrderEventHandler.java): `payment-service/src/main/java/kz/natooa/events/OrderEventHandler.java`
- [Event deduplication](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/DeduplicationService.java): `payment-service/src/main/java/kz/natooa/events/DeduplicationService.java`
- [Payment service](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentService.java): `payment-service/src/main/java/kz/natooa/Payment/PaymentService.java`
- [Provider factory](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentProviderFactory.java): `payment-service/src/main/java/kz/natooa/Payment/PaymentProviderFactory.java`
- [Payment provider](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentProvider.java): `payment-service/src/main/java/kz/natooa/Payment/PaymentProvider.java`
- [Payment store](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentRepository.java): `payment-service/src/main/java/kz/natooa/Payment/PaymentRepository.java`
- [Refund store](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/Payment/PaymentRefundRepository.java): `payment-service/src/main/java/kz/natooa/Payment/PaymentRefundRepository.java`
- [Processed messages](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/processed/ProcessedMessageRepository.java): `payment-service/src/main/java/kz/natooa/processed/ProcessedMessageRepository.java`

### Events and messaging

- [Outbox poller](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/outbox/OrderPollerService.java): `order-service/src/main/java/kz/natooa/outbox/OrderPollerService.java`
- [Outbox store](https://github.com/natooa/order_management_microservices_system/blob/main/order-service/src/main/java/kz/natooa/outbox/OutboxRepository.java): `order-service/src/main/java/kz/natooa/outbox/OutboxRepository.java`
- [Payment event publisher](https://github.com/natooa/order_management_microservices_system/blob/main/payment-service/src/main/java/kz/natooa/events/PaymentEventPublisher.java): `payment-service/src/main/java/kz/natooa/events/PaymentEventPublisher.java`
- [Domain event types](https://github.com/natooa/order_management_microservices_system/blob/main/common/src/main/java/kz/natooa/events/DomainEvent.java): `common/src/main/java/kz/natooa/events/DomainEvent.java`
- [Shipping service](https://github.com/natooa/order_management_microservices_system/blob/main/shipping-service/src/main/java/kz/natooa/App.java): `shipping-service/src/main/java/kz/natooa/App.java`

### Other components

- **Order client**
- **Kafka**

## Connections

- Order client → Order API: submits order
- Order API → Order service: creates order
- Price calculation → Product gRPC client: fetches product
- Product API → Product service: delegates requests
- Product service → Product store: accesses products
- Product gRPC service → Product service: serves product data
- Inventory API → Inventory service: delegates update
- Inventory service → Inventory store: accesses inventory
- Reservation gRPC → Reservation service: handles reservations
- Reservation service → Reservation store: accesses reservations
- Order event handler → Event deduplication: marks events
- Event deduplication → Processed messages: records event IDs
- Payment service → Provider factory: selects provider
- Provider factory → Payment provider: creates provider
- Payment service → Payment store: stores payments
- Payment service → Refund store: stores refunds
- Outbox poller → Outbox store: reads and updates
- Outbox poller → Kafka: publishes events
