# evgenysaenko/delivery-service architecture

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

- Interactive diagram: https://gitdiagram.com/evgenysaenko/delivery-service
- Repository: https://github.com/evgenysaenko/delivery-service

## Overview

Delivery Service accepts shop orders over RabbitMQ, persists them as processed deliveries, exposes order lists and courier-driven status changes, and publishes a delivery-status update to the shop. Its core path runs through the REST controller, order service, converter, repository, and database. The README also describes customer email notifications and a small web frontend; email implementation details are not shown in the sampled source, so that branch is documented but unverified. Some integration wiring is likewise inferred only from the README.

Main entry points: [`src/main/java/com/delivery/service/services/OrderService.java`](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/services/OrderService.java) (Order service), [`src/main/java/com/delivery/service/controller/OrderController.java`](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/controller/OrderController.java) (Order REST API), [`src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java`](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java) (HTTP error handling), [`src/main/java/com/delivery/service/repositories/OrderRepository.java`](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/repositories/OrderRepository.java) (Order repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Order intake"]
  node_rabbit_config["Rabbit configuration"]
end

subgraph group_delivery["Delivery workflow"]
  node_order_service["Order service<br/>[OrderService.java]"]
  node_email_alert["Customer email alert"]
end

subgraph group_data["Persistence and contracts"]
  node_converter["Order converter"]
  node_order_dto["Incoming order DTO<br/>[OrderDto.java]"]
  node_status_dto["Status response DTO"]
  node_order_entity["Delivery order entity<br/>[Order.java]"]
  node_delivery_status["Delivery statuses"]
  node_repository["Order repository"]
  node_database[("Order database")]
end

subgraph group_interfaces["Interfaces and integrations"]
  node_rabbit["RabbitMQ"]
  node_app["Spring Boot application"]
  node_controller["Order REST API"]
  node_exception_advice["HTTP error handling"]
  node_not_found["Not-found exception"]
  node_shop_error["Error response<br/>[ShopError.java]"]
  node_web_ui["Delivery web UI<br/>[index.js]"]
end

node_shop(("Online shop"))
node_api_user(("Courier / API client"))

node_shop -->|"sends orders"| node_rabbit
node_rabbit -->|"delivers messages"| node_order_service
node_order_service -->|"converts orders"| node_converter
node_order_service -->|"saves and queries"| node_repository
node_repository -->|"persists orders"| node_database
node_api_user -->|"requests status"| node_controller
node_controller -->|"delegates updates"| node_order_service
node_controller -->|"requests status lists"| node_order_service
node_order_service -->|"publishes status"| node_rabbit
node_rabbit_config -.->|"configures messaging"| node_rabbit
node_controller -->|"throws when absent"| node_not_found
node_exception_advice -->|"handles exception"| node_not_found
node_exception_advice -->|"builds response"| node_shop_error
node_order_service -.->|"sends customer email"| node_email_alert
node_app -.->|"hosts REST API"| node_controller

click node_app "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/DeliveryServiceApplication.java"
click node_rabbit_config "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/config/RabbitMQConfig.java"
click node_order_service "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/services/OrderService.java"
click node_controller "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/controller/OrderController.java"
click node_converter "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/utils/converter/OrderConverter.java"
click node_order_dto "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/dto/OrderDto.java"
click node_status_dto "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/dto/OrderStatusDto.java"
click node_order_entity "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/persistence/entities/Order.java"
click node_delivery_status "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/persistence/entities/enums/DeliveryStatus.java"
click node_repository "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/repositories/OrderRepository.java"
click node_exception_advice "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java"
click node_not_found "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ResourceNotFoundException.java"
click node_shop_error "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ShopError.java"
click node_web_ui "https://github.com/evgenysaenko/delivery-service/blob/master/src/main/resources/static/index.js"
click node_email_alert "https://github.com/evgenysaenko/delivery-service/tree/master/src/main/java/com/delivery/service/services"

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_rabbit_config,node_api_user toneBlue
class node_order_service,node_email_alert toneAmber
class node_converter,node_order_dto,node_status_dto,node_order_entity,node_delivery_status,node_repository,node_database toneMint
class node_rabbit,node_app,node_controller,node_exception_advice,node_not_found,node_shop_error,node_web_ui toneRose
class node_shop toneIndigo
```

## Components

### Order intake

- [Rabbit configuration](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/config/RabbitMQConfig.java): `src/main/java/com/delivery/service/config/RabbitMQConfig.java`

### Delivery workflow

- [Order service](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/services/OrderService.java): `src/main/java/com/delivery/service/services/OrderService.java`
- [Customer email alert](https://github.com/evgenysaenko/delivery-service/tree/master/src/main/java/com/delivery/service/services): `src/main/java/com/delivery/service/services`

### Persistence and contracts

- [Order converter](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/utils/converter/OrderConverter.java): `src/main/java/com/delivery/service/utils/converter/OrderConverter.java`
- [Incoming order DTO](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/dto/OrderDto.java): `src/main/java/com/delivery/service/dto/OrderDto.java`
- [Status response DTO](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/dto/OrderStatusDto.java): `src/main/java/com/delivery/service/dto/OrderStatusDto.java`
- [Delivery order entity](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/persistence/entities/Order.java): `src/main/java/com/delivery/service/persistence/entities/Order.java`
- [Delivery statuses](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/persistence/entities/enums/DeliveryStatus.java): `src/main/java/com/delivery/service/persistence/entities/enums/DeliveryStatus.java`
- [Order repository](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/repositories/OrderRepository.java): `src/main/java/com/delivery/service/repositories/OrderRepository.java`
- **Order database**

### Interfaces and integrations

- **RabbitMQ**
- [Spring Boot application](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/DeliveryServiceApplication.java): `src/main/java/com/delivery/service/DeliveryServiceApplication.java`
- [Order REST API](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/controller/OrderController.java): `src/main/java/com/delivery/service/controller/OrderController.java`
- [HTTP error handling](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java): `src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java`
- [Not-found exception](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ResourceNotFoundException.java): `src/main/java/com/delivery/service/exceptions/ResourceNotFoundException.java`
- [Error response](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/java/com/delivery/service/exceptions/ShopError.java): `src/main/java/com/delivery/service/exceptions/ShopError.java`
- [Delivery web UI](https://github.com/evgenysaenko/delivery-service/blob/master/src/main/resources/static/index.js): `src/main/resources/static/index.js`

### Other components

- **Online shop**
- **Courier / API client**

## Connections

- Online shop → RabbitMQ: sends orders (evidence: `README.md`)
- RabbitMQ → Order service: delivers messages (evidence: `src/main/java/com/delivery/service/services/OrderService.java`)
- Order service → Order converter: converts orders (evidence: `src/main/java/com/delivery/service/services/OrderService.java`)
- Order service → Order repository: saves and queries (evidence: `src/main/java/com/delivery/service/services/OrderService.java`)
- Order repository → Order database: persists orders (evidence: `src/main/java/com/delivery/service/repositories/OrderRepository.java`)
- Courier / API client → Order REST API: requests status (evidence: `src/main/java/com/delivery/service/controller/OrderController.java`)
- Order REST API → Order service: delegates updates (evidence: `src/main/java/com/delivery/service/controller/OrderController.java`)
- Order REST API → Order service: requests status lists (evidence: `src/main/java/com/delivery/service/controller/OrderController.java`)
- Order service → RabbitMQ: publishes status (evidence: `src/main/java/com/delivery/service/services/OrderService.java`)
- Rabbit configuration → RabbitMQ: configures messaging
- Order REST API → Not-found exception: throws when absent (evidence: `src/main/java/com/delivery/service/controller/OrderController.java`)
- HTTP error handling → Not-found exception: handles exception (evidence: `src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java`)
- HTTP error handling → Error response: builds response (evidence: `src/main/java/com/delivery/service/exceptions/ExceptionControllerAdvice.java`)
- Order service → Customer email alert: sends customer email (evidence: `README.md`)
- Spring Boot application → Order REST API: hosts REST API
