# rautaruukkipalich/virtual-orchestrator architecture

> Architecture diagram of the GitHub repository rautaruukkipalich/virtual-orchestrator, 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/rautaruukkipalich/virtual-orchestrator
- Repository: https://github.com/rautaruukkipalich/virtual-orchestrator

## Overview

OrderApp is an order-processing backend with authentication, supplier-offer sourcing and booking, and asynchronous order-event handling. The visible HTTP workflow accepts an authenticated order request, delegates through a use case, and exposes order listing and status; the bill endpoint currently returns not found. The tree names further order-processing stages, but most use-case and consumer implementations were not sampled, so their internal calls are not asserted. The sampled outbox processor polls stored messages and dispatches them through a type-selected producer.

Main entry points: [`src/main/java/org/orderapp/controllers/http/HttpOrderController.java`](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/controllers/http/HttpOrderController.java) (Order Controller), [`src/main/java/org/orderapp/services/AuthService.java`](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/AuthService.java) (Auth Service), [`src/main/java/org/orderapp/services/SupplierService.java`](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/SupplierService.java) (Supplier Service), [`src/main/java/org/orderapp/processors/OutboxProcessorService.java`](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/processors/OutboxProcessorService.java) (Outbox Processor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_auth_http["Auth Controller"]
  node_order_http["Order Controller"]
end

subgraph group_orders["Order Workflow"]
  node_create_order["Create Order"]
  node_list_orders["User Orders"]
  node_order_status["Order Status"]
  node_order_bill["Order Bill"]
  node_order_service["Order Service<br/>[OrderService.java]"]
  node_order_repository["Order Repository"]
  node_order_processor["Process Order"]
end

subgraph group_supplier["Supplier Offers"]
  node_fetch_offers["Fetch Offers"]
  node_book_best["Book Best Offer"]
  node_supplier_service["Supplier Service"]
  node_supplier_factory["Adapter Factory"]
  node_supplier_adapters["Supplier Adapters"]
  node_offer_service["Offer Service<br/>[OfferService.java]"]
  node_offer_repository["Offer Repository"]
end

subgraph group_messaging["Async Messaging"]
  node_order_event_consumer["Order Event Consumer"]
  node_outbox_service["Outbox Service<br/>[OutboxService.java]"]
  node_outbox_processor["Outbox Processor"]
  node_outbox_repository["Outbox Repository"]
  node_queue_factory["Queue Factory"]
  node_topic_producer["Topic Producer<br/>[TopicProducer.java]"]
end

subgraph group_auth["Authentication"]
  node_auth_service["Auth Service<br/>[AuthService.java]"]
  node_user_service["User Service<br/>[UserService.java]"]
  node_jwt_service["JWT Service<br/>[JwtService.java]"]
  node_user_repository["User Repository"]
end

node_client(("API Client"))
node_broker["Message Broker"]

node_client -->|"sends credentials"| node_auth_http
node_client -->|"requests orders"| node_order_http
node_auth_http -->|"calls"| node_auth_service
node_auth_service -->|"looks up or creates user"| node_user_service
node_auth_service -->|"generates tokens"| node_jwt_service
node_order_http -->|"creates order"| node_create_order
node_order_http -->|"lists orders"| node_list_orders
node_order_http -->|"gets status"| node_order_status
node_order_http -->|"requests bill"| node_order_bill
node_order_service -->|"reads and writes"| node_order_repository
node_supplier_service -->|"gets adapters"| node_supplier_factory
node_supplier_service -->|"creates offer"| node_offer_service
node_offer_service -->|"writes offer"| node_offer_repository
node_outbox_processor -->|"loads and saves"| node_outbox_repository
node_outbox_processor -->|"selects producer"| node_queue_factory
node_queue_factory -->|"provides producer"| node_topic_producer
node_topic_producer -->|"publishes message"| node_broker

click node_auth_http "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/controllers/http/HttpAuthController.java"
click node_auth_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/AuthService.java"
click node_user_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/UserService.java"
click node_jwt_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/core/services/JwtService.java"
click node_user_repository "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/UserRepository.java"
click node_order_http "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/controllers/http/HttpOrderController.java"
click node_create_order "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/CreateOrderUseCase.java"
click node_list_orders "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/UserOrdersUseCase.java"
click node_order_status "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/OrderStatusUseCase.java"
click node_order_bill "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/OrderBillUseCase.java"
click node_order_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OrderService.java"
click node_order_repository "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OrderRepository.java"
click node_order_processor "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/ProcessOrderUseCase.java"
click node_fetch_offers "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/FetchOffersUseCase.java"
click node_book_best "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/BookBestOfferUseCase.java"
click node_supplier_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/SupplierService.java"
click node_supplier_factory "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/adapters/SupplierAdapterFactory.java"
click node_supplier_adapters "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/adapters/suppliers/SupplierAAdapter.java"
click node_offer_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OfferService.java"
click node_offer_repository "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OfferRepository.java"
click node_order_event_consumer "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/processors/OrderEventConsumer.java"
click node_outbox_service "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OutboxService.java"
click node_outbox_processor "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/processors/OutboxProcessorService.java"
click node_outbox_repository "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OutboxRepository.java"
click node_queue_factory "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/factory/OutboxTypeQueueFactory.java"
click node_topic_producer "https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/factory/TopicProducer.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_auth_http,node_order_http,node_client toneBlue
class node_create_order,node_list_orders,node_order_status,node_order_bill,node_order_service,node_order_repository,node_order_processor toneAmber
class node_fetch_offers,node_book_best,node_supplier_service,node_supplier_factory,node_supplier_adapters,node_offer_service,node_offer_repository toneMint
class node_order_event_consumer,node_outbox_service,node_outbox_processor,node_outbox_repository,node_queue_factory,node_topic_producer toneRose
class node_auth_service,node_user_service,node_jwt_service,node_user_repository,node_broker toneIndigo
```

## Components

### HTTP API

- [Auth Controller](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/controllers/http/HttpAuthController.java): `src/main/java/org/orderapp/controllers/http/HttpAuthController.java`
- [Order Controller](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/controllers/http/HttpOrderController.java): `src/main/java/org/orderapp/controllers/http/HttpOrderController.java`

### Order Workflow

- [Create Order](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/CreateOrderUseCase.java): `src/main/java/org/orderapp/usecases/CreateOrderUseCase.java`
- [User Orders](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/UserOrdersUseCase.java): `src/main/java/org/orderapp/usecases/UserOrdersUseCase.java`
- [Order Status](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/OrderStatusUseCase.java): `src/main/java/org/orderapp/usecases/OrderStatusUseCase.java`
- [Order Bill](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/OrderBillUseCase.java): `src/main/java/org/orderapp/usecases/OrderBillUseCase.java`
- [Order Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OrderService.java): `src/main/java/org/orderapp/services/OrderService.java`
- [Order Repository](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OrderRepository.java): `src/main/java/org/orderapp/repositories/OrderRepository.java`
- [Process Order](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/ProcessOrderUseCase.java): `src/main/java/org/orderapp/usecases/ProcessOrderUseCase.java`

### Supplier Offers

- [Fetch Offers](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/FetchOffersUseCase.java): `src/main/java/org/orderapp/usecases/FetchOffersUseCase.java`
- [Book Best Offer](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/usecases/BookBestOfferUseCase.java): `src/main/java/org/orderapp/usecases/BookBestOfferUseCase.java`
- [Supplier Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/SupplierService.java): `src/main/java/org/orderapp/services/SupplierService.java`
- [Adapter Factory](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/adapters/SupplierAdapterFactory.java): `src/main/java/org/orderapp/adapters/SupplierAdapterFactory.java`
- [Supplier Adapters](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/adapters/suppliers/SupplierAAdapter.java): `src/main/java/org/orderapp/adapters/suppliers/SupplierAAdapter.java`
- [Offer Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OfferService.java): `src/main/java/org/orderapp/services/OfferService.java`
- [Offer Repository](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OfferRepository.java): `src/main/java/org/orderapp/repositories/OfferRepository.java`

### Async Messaging

- [Order Event Consumer](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/processors/OrderEventConsumer.java): `src/main/java/org/orderapp/processors/OrderEventConsumer.java`
- [Outbox Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/OutboxService.java): `src/main/java/org/orderapp/services/OutboxService.java`
- [Outbox Processor](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/processors/OutboxProcessorService.java): `src/main/java/org/orderapp/processors/OutboxProcessorService.java`
- [Outbox Repository](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/OutboxRepository.java): `src/main/java/org/orderapp/repositories/OutboxRepository.java`
- [Queue Factory](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/factory/OutboxTypeQueueFactory.java): `src/main/java/org/orderapp/factory/OutboxTypeQueueFactory.java`
- [Topic Producer](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/factory/TopicProducer.java): `src/main/java/org/orderapp/factory/TopicProducer.java`

### Authentication

- [Auth Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/AuthService.java): `src/main/java/org/orderapp/services/AuthService.java`
- [User Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/services/UserService.java): `src/main/java/org/orderapp/services/UserService.java`
- [JWT Service](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/core/services/JwtService.java): `src/main/java/org/orderapp/core/services/JwtService.java`
- [User Repository](https://github.com/rautaruukkipalich/virtual-orchestrator/blob/dev/src/main/java/org/orderapp/repositories/UserRepository.java): `src/main/java/org/orderapp/repositories/UserRepository.java`

### Other components

- **API Client**
- **Message Broker**

## Connections

- API Client → Auth Controller: sends credentials
- API Client → Order Controller: requests orders
- Auth Controller → Auth Service: calls
- Auth Service → User Service: looks up or creates user
- Auth Service → JWT Service: generates tokens
- Order Controller → Create Order: creates order
- Order Controller → User Orders: lists orders
- Order Controller → Order Status: gets status
- Order Controller → Order Bill: requests bill
- Order Service → Order Repository: reads and writes
- Supplier Service → Adapter Factory: gets adapters
- Supplier Service → Offer Service: creates offer
- Offer Service → Offer Repository: writes offer
- Outbox Processor → Outbox Repository: loads and saves
- Outbox Processor → Queue Factory: selects producer
- Queue Factory → Topic Producer: provides producer
- Topic Producer → Message Broker: publishes message
