# manuelrodnav/microservices-ticketing-backend architecture

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

- Interactive diagram: https://gitdiagram.com/manuelrodnav/microservices-ticketing-backend
- Repository: https://github.com/manuelrodnav/microservices-ticketing-backend

## Overview

This repository is a Spring-based ticketing backend split across an API gateway, booking, inventory, and order services. A client enters through the gateway; booking checks the customer and inventory, then publishes a booking event. The order service consumes it, persists an order, and requests an inventory update. Inventory also exposes event and venue lookups and capacity management. The README documents Keycloak, Kafka, MySQL, and resilience capabilities; sampled code confirms Kafka flow and service calls, but not all configuration or gateway wiring, so uncertain links are omitted or marked unverified.

Main entry points: [`bookingservice/src/main/java/com/bookingservice/services/bookingService.java`](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/services/bookingService.java) (Booking Orchestration), [`inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java) (Inventory Operations), [`orderservice/src/main/java/com/orderservice/Service/orderService.java`](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Service/orderService.java) (Order Processing), [`inventoryservice/src/main/java/com/inventoryservice/InventoryController.java`](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/InventoryController.java) (Inventory API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["API Gateway"]
  node_gateway_routes["Service Routes"]
  node_gateway_security["OAuth2 Security"]
end

subgraph group_booking["Booking Service"]
  node_booking_api["Booking API"]
  node_booking_flow["Booking Orchestration"]
  node_booking_request["Booking Request"]
  node_customer_repository["Customer Lookup"]
  node_booking_inventory_client["Inventory Client"]
  node_booking_event["Booking Event<br/>[BookingEvents.java]"]
  node_booking_response["Booking Result"]
end

subgraph group_inventory["Inventory Service"]
  node_inventory_api["Inventory API"]
  node_inventory_service["Inventory Operations"]
  node_event_repository["Event Repository"]
  node_venue_repository["Venue Repository"]
  node_event_entity["Event Model<br/>[Event.java]"]
  node_venue_entity["Venue Model<br/>[Venue.java]"]
end

subgraph group_orders["Order Service"]
  node_order_service["Order Processing<br/>[orderService.java]"]
  node_order_inventory_client["Inventory Updater"]
  node_order_repository["Order Repository"]
  node_order_entity["Order Model<br/>[Order.java]"]
end

node_client(("API Client"))
node_keycloak["Keycloak IdP"]
node_kafka["Kafka"]
node_inventory_mysql[("MySQL Store")]

node_client -->|"sends requests"| node_gateway_routes
node_gateway_routes -->|"routes bookings"| node_booking_api
node_gateway_routes -->|"routes inventory"| node_inventory_api
node_gateway_security -->|"uses identity"| node_keycloak
node_booking_api -->|"calls"| node_booking_flow
node_booking_api -->|"accepts"| node_booking_request
node_booking_flow -->|"looks up customer"| node_customer_repository
node_booking_flow -->|"checks availability"| node_booking_inventory_client
node_booking_flow -->|"creates and publishes"| node_booking_event
node_booking_flow -->|"sends event"| node_kafka
node_booking_flow -->|"builds result"| node_booking_response
node_order_service -->|"consumes event"| node_kafka
node_order_service -->|"creates order"| node_order_entity
node_order_service -->|"persists order"| node_order_repository
node_order_service -->|"requests capacity update"| node_order_inventory_client
node_inventory_api -->|"calls operations"| node_inventory_service
node_inventory_service -->|"reads and updates events"| node_event_repository
node_inventory_service -->|"reads venues"| node_venue_repository
node_inventory_service -->|"maps event data"| node_event_entity
node_inventory_service -->|"maps venue data"| node_venue_entity
node_booking_inventory_client -.->|"fetches availability"| node_inventory_api
node_order_inventory_client -.->|"updates capacity"| node_inventory_api
node_event_repository -.->|"uses persistence"| node_inventory_mysql
node_venue_repository -.->|"uses persistence"| node_inventory_mysql
node_customer_repository -.->|"uses persistence"| node_inventory_mysql
node_order_repository -.->|"uses persistence"| node_inventory_mysql

click node_gateway_routes "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/apigateway/src/main/java/com/apigateway/route/BookingServiceRoute.java"
click node_gateway_security "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/apigateway/src/main/java/com/apigateway/config/SecurityConfig.java"
click node_booking_api "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Controller/BookingController.java"
click node_booking_flow "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/services/bookingService.java"
click node_booking_request "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/BookingRequest.java"
click node_customer_repository "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Repository/CustomerRepository.java"
click node_booking_inventory_client "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Client/InventoryServiceClient.java"
click node_booking_event "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/bookingservice/Events/BookingEvents.java"
click node_booking_response "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Response/BookingResponse.java"
click node_inventory_api "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/InventoryController.java"
click node_inventory_service "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java"
click node_event_repository "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Repository/EventRepository.java"
click node_venue_repository "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Repository/VenueRepository.java"
click node_event_entity "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Entity/Event.java"
click node_venue_entity "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Entity/Venue.java"
click node_order_service "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Service/orderService.java"
click node_order_inventory_client "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Client/InventoryClient.java"
click node_order_repository "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Repository/orderRepository.java"
click node_order_entity "https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Entity/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_gateway_routes,node_gateway_security,node_client toneBlue
class node_booking_api,node_booking_flow,node_booking_request,node_customer_repository,node_booking_inventory_client,node_booking_event,node_booking_response,node_inventory_mysql toneAmber
class node_inventory_api,node_inventory_service,node_event_repository,node_venue_repository,node_event_entity,node_venue_entity toneMint
class node_order_service,node_order_inventory_client,node_order_repository,node_order_entity toneRose
class node_keycloak,node_kafka toneIndigo
```

## Components

### API Gateway

- [Service Routes](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/apigateway/src/main/java/com/apigateway/route/BookingServiceRoute.java): `apigateway/src/main/java/com/apigateway/route/BookingServiceRoute.java`
- [OAuth2 Security](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/apigateway/src/main/java/com/apigateway/config/SecurityConfig.java): `apigateway/src/main/java/com/apigateway/config/SecurityConfig.java`

### Booking Service

- [Booking API](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Controller/BookingController.java): `bookingservice/src/main/java/com/bookingservice/Controller/BookingController.java`
- [Booking Orchestration](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/services/bookingService.java): `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`
- [Booking Request](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/BookingRequest.java): `bookingservice/src/main/java/com/bookingservice/BookingRequest.java`
- [Customer Lookup](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Repository/CustomerRepository.java): `bookingservice/src/main/java/com/bookingservice/Repository/CustomerRepository.java`
- [Inventory Client](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Client/InventoryServiceClient.java): `bookingservice/src/main/java/com/bookingservice/Client/InventoryServiceClient.java`
- [Booking Event](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/bookingservice/Events/BookingEvents.java): `orderservice/src/main/java/com/bookingservice/Events/BookingEvents.java`
- [Booking Result](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/bookingservice/src/main/java/com/bookingservice/Response/BookingResponse.java): `bookingservice/src/main/java/com/bookingservice/Response/BookingResponse.java`

### Inventory Service

- [Inventory API](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/InventoryController.java): `inventoryservice/src/main/java/com/inventoryservice/InventoryController.java`
- [Inventory Operations](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java): `inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`
- [Event Repository](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Repository/EventRepository.java): `inventoryservice/src/main/java/com/inventoryservice/Repository/EventRepository.java`
- [Venue Repository](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Repository/VenueRepository.java): `inventoryservice/src/main/java/com/inventoryservice/Repository/VenueRepository.java`
- [Event Model](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Entity/Event.java): `inventoryservice/src/main/java/com/inventoryservice/Entity/Event.java`
- [Venue Model](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/inventoryservice/src/main/java/com/inventoryservice/Entity/Venue.java): `inventoryservice/src/main/java/com/inventoryservice/Entity/Venue.java`

### Order Service

- [Order Processing](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Service/orderService.java): `orderservice/src/main/java/com/orderservice/Service/orderService.java`
- [Inventory Updater](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Client/InventoryClient.java): `orderservice/src/main/java/com/orderservice/Client/InventoryClient.java`
- [Order Repository](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Repository/orderRepository.java): `orderservice/src/main/java/com/orderservice/Repository/orderRepository.java`
- [Order Model](https://github.com/manuelrodnav/microservices-ticketing-backend/blob/main/orderservice/src/main/java/com/orderservice/Entity/Order.java): `orderservice/src/main/java/com/orderservice/Entity/Order.java`

### Other components

- **API Client**
- **Keycloak IdP**
- **Kafka**
- **MySQL Store**

## Connections

- API Client → Service Routes: sends requests (evidence: `README.md`)
- Service Routes → Booking API: routes bookings (evidence: `README.md`)
- Service Routes → Inventory API: routes inventory (evidence: `README.md`)
- OAuth2 Security → Keycloak IdP: uses identity (evidence: `README.md`)
- Booking API → Booking Orchestration: calls (evidence: `bookingservice/src/main/java/com/bookingservice/Controller/BookingController.java`)
- Booking API → Booking Request: accepts (evidence: `bookingservice/src/main/java/com/bookingservice/Controller/BookingController.java`)
- Booking Orchestration → Customer Lookup: looks up customer (evidence: `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`)
- Booking Orchestration → Inventory Client: checks availability (evidence: `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`)
- Booking Orchestration → Booking Event: creates and publishes (evidence: `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`)
- Booking Orchestration → Kafka: sends event (evidence: `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`)
- Booking Orchestration → Booking Result: builds result (evidence: `bookingservice/src/main/java/com/bookingservice/services/bookingService.java`)
- Order Processing → Kafka: consumes event (evidence: `orderservice/src/main/java/com/orderservice/Service/orderService.java`)
- Order Processing → Order Model: creates order (evidence: `orderservice/src/main/java/com/orderservice/Service/orderService.java`)
- Order Processing → Order Repository: persists order (evidence: `orderservice/src/main/java/com/orderservice/Service/orderService.java`)
- Order Processing → Inventory Updater: requests capacity update (evidence: `orderservice/src/main/java/com/orderservice/Service/orderService.java`)
- Inventory API → Inventory Operations: calls operations (evidence: `inventoryservice/src/main/java/com/inventoryservice/InventoryController.java`)
- Inventory Operations → Event Repository: reads and updates events (evidence: `inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`)
- Inventory Operations → Venue Repository: reads venues (evidence: `inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`)
- Inventory Operations → Event Model: maps event data (evidence: `inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`)
- Inventory Operations → Venue Model: maps venue data (evidence: `inventoryservice/src/main/java/com/inventoryservice/service/inventoryService.java`)
- Inventory Client → Inventory API: fetches availability
- Inventory Updater → Inventory API: updates capacity
- Event Repository → MySQL Store: uses persistence
- Venue Repository → MySQL Store: uses persistence
- Customer Lookup → MySQL Store: uses persistence
- Order Repository → MySQL Store: uses persistence
