# grb10988/event-reservation-api architecture

> Architecture diagram of the GitHub repository grb10988/event-reservation-api, 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/grb10988/event-reservation-api
- Repository: https://github.com/grb10988/event-reservation-api

## Overview

Event Reservation is an ASP.NET Core API for managing customers, venues, events, seats, reservations, and orders. The principal workflow begins with an HTTP request, enters the relevant endpoint, is dispatched to an application feature, and uses repository abstractions backed by PostgreSQL; results are returned through the API. A separate RabbitMQ integration-event path consumes messages and dispatches them to handlers, while application messaging can publish events. The README is empty, so capability coverage is based on the feature tree; several internal links are omitted where sampled code does not establish their wiring.

Main entry points: [`src/api/Program.cs`](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Program.cs) (API host), [`src/application/Abstractions/Requests/QueryHandlerWrapper.cs`](https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Requests/QueryHandlerWrapper.cs) (Request pipeline), [`src/application/Abstractions/Dispatcher.cs`](https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Dispatcher.cs) (Request dispatcher), [`src/application/Interfaces`](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Interfaces) (Repository contracts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_host["API host<br/>[Program.cs]"]
  node_customer_api["Customer endpoints"]
  node_event_api["Event endpoints<br/>[EventEndpoints.cs]"]
  node_venue_api["Venue endpoints<br/>[VenueEndpoints.cs]"]
  node_seat_api["Seat endpoints<br/>[SeatEndpoints.cs]"]
  node_reservation_api["Reservation endpoints"]
  node_order_api["Order endpoints<br/>[OrderEndpoints.cs]"]
  node_event_admin_api["Event operations<br/>[EventEndpoints.cs]"]
  node_telemetry["Telemetry export"]
end

subgraph group_application["Application workflows"]
  node_dispatcher["Request dispatcher<br/>[Dispatcher.cs]"]
  node_request_wrapper["Request pipeline"]
  node_customers["Customer workflows"]
  node_venues["Venue workflows"]
  node_events["Event workflows"]
  node_seats["Seat workflows"]
  node_reservations["Reservation workflows"]
  node_orders["Order workflows"]
  node_repository_contracts["Repository contracts"]
  node_event_dispatcher["Integration dispatcher"]
end

subgraph group_domain["Domain model"]
  node_models["Reservation models"]
  node_result_types["Result handling<br/>[Result.cs]"]
end

subgraph group_persistence["Persistence"]
  node_repositories["SQL repositories"]
  node_connection["Postgres connection"]
end

subgraph group_messaging["Messaging"]
  node_consumer["RabbitMQ consumer"]
  node_publisher["RabbitMQ publisher"]
end

node_user(("API caller"))
node_database[("PostgreSQL")]
node_broker["RabbitMQ broker"]
node_collector(("OTLP collector"))

node_user -->|"sends HTTP"| node_host
node_host -->|"maps routes"| node_customer_api
node_host -->|"maps routes"| node_event_api
node_host -->|"maps routes"| node_venue_api
node_host -->|"maps routes"| node_seat_api
node_host -->|"maps routes"| node_reservation_api
node_host -->|"maps routes"| node_order_api
node_customer_api -->|"dispatches requests"| node_dispatcher
node_event_api -->|"dispatches requests"| node_dispatcher
node_venue_api -->|"dispatches requests"| node_dispatcher
node_seat_api -->|"dispatches requests"| node_dispatcher
node_reservation_api -->|"dispatches requests"| node_dispatcher
node_order_api -->|"dispatches requests"| node_dispatcher
node_dispatcher -->|"handles requests"| node_request_wrapper
node_request_wrapper -->|"invokes handler"| node_customers
node_request_wrapper -->|"invokes handler"| node_venues
node_request_wrapper -->|"invokes handler"| node_events
node_request_wrapper -->|"invokes handler"| node_seats
node_request_wrapper -->|"invokes handler"| node_reservations
node_request_wrapper -->|"invokes handler"| node_orders
node_customers -->|"uses contracts"| node_repository_contracts
node_venues -->|"uses contracts"| node_repository_contracts
node_events -->|"uses contracts"| node_repository_contracts
node_seats -->|"uses contracts"| node_repository_contracts
node_reservations -->|"uses contracts"| node_repository_contracts
node_orders -->|"uses contracts"| node_repository_contracts
node_repository_contracts -->|"implemented by"| node_repositories
node_repositories -->|"opens connections"| node_connection
node_connection -->|"connects to"| node_database
node_repositories -->|"queries and updates"| node_database
node_customers -->|"uses models"| node_models
node_venues -->|"uses models"| node_models
node_events -->|"uses models"| node_models
node_seats -->|"uses models"| node_models
node_reservations -->|"uses models"| node_models
node_orders -->|"uses models"| node_models
node_consumer -->|"consumes messages"| node_broker
node_consumer -->|"dispatches events"| node_event_dispatcher
node_publisher -->|"publishes events"| node_broker
node_host -->|"configures"| node_telemetry
node_telemetry -.->|"exports telemetry"| node_collector

click node_host "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Program.cs"
click node_customer_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/CustomerEndpoints.cs"
click node_event_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/EventEndpoints.cs"
click node_venue_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/VenueEndpoints.cs"
click node_seat_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/SeatEndpoints.cs"
click node_reservation_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/ReservationEndpoints.cs"
click node_order_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/OrderEndpoints.cs"
click node_event_admin_api "https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/EventEndpoints.cs"
click node_dispatcher "https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Dispatcher.cs"
click node_request_wrapper "https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Requests/QueryHandlerWrapper.cs"
click node_customers "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Customers"
click node_venues "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Venues"
click node_events "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Events"
click node_seats "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Seats"
click node_reservations "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Reservations"
click node_orders "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Orders"
click node_repository_contracts "https://github.com/grb10988/event-reservation-api/tree/main/src/application/Interfaces"
click node_models "https://github.com/grb10988/event-reservation-api/tree/main/src/domain/Models"
click node_result_types "https://github.com/grb10988/event-reservation-api/blob/main/src/domain/Results/Result.cs"
click node_repositories "https://github.com/grb10988/event-reservation-api/tree/main/src/infrastructure/Persistence/Repositories"
click node_connection "https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Persistence/NpgsqlConnectionFactory.cs"
click node_event_dispatcher "https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/IntegrationEvents/IntegrationEventDispatcher.cs"
click node_consumer "https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Messaging/Consumers/RabbitMqConsumerWorker.cs"
click node_publisher "https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Messaging/Publishers/RabbitMqPublisher.cs"
click node_telemetry "https://github.com/grb10988/event-reservation-api/blob/main/src/api/DependencyInjection/ObservabilityServiceCollectionExtensions.cs"

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_host,node_customer_api,node_event_api,node_venue_api,node_seat_api,node_reservation_api,node_order_api,node_event_admin_api,node_telemetry toneBlue
class node_dispatcher,node_request_wrapper,node_customers,node_venues,node_events,node_seats,node_reservations,node_orders,node_repository_contracts,node_event_dispatcher,node_database toneAmber
class node_models,node_result_types,node_user toneMint
class node_repositories,node_connection toneRose
class node_consumer,node_publisher,node_broker,node_collector toneIndigo
```

## Components

### HTTP API

- [API host](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Program.cs): `src/api/Program.cs`
- [Customer endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/CustomerEndpoints.cs): `src/api/Endpoints/CustomerEndpoints.cs`
- [Event endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/EventEndpoints.cs): `src/api/Endpoints/EventEndpoints.cs`
- [Venue endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/VenueEndpoints.cs): `src/api/Endpoints/VenueEndpoints.cs`
- [Seat endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/SeatEndpoints.cs): `src/api/Endpoints/SeatEndpoints.cs`
- [Reservation endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/ReservationEndpoints.cs): `src/api/Endpoints/ReservationEndpoints.cs`
- [Order endpoints](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/OrderEndpoints.cs): `src/api/Endpoints/OrderEndpoints.cs`
- [Event operations](https://github.com/grb10988/event-reservation-api/blob/main/src/api/Endpoints/EventEndpoints.cs): `src/api/Endpoints/EventEndpoints.cs`
- [Telemetry export](https://github.com/grb10988/event-reservation-api/blob/main/src/api/DependencyInjection/ObservabilityServiceCollectionExtensions.cs): `src/api/DependencyInjection/ObservabilityServiceCollectionExtensions.cs`

### Application workflows

- [Request dispatcher](https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Dispatcher.cs): `src/application/Abstractions/Dispatcher.cs`
- [Request pipeline](https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/Requests/QueryHandlerWrapper.cs): `src/application/Abstractions/Requests/QueryHandlerWrapper.cs`
- [Customer workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Customers): `src/application/Features/Customers`
- [Venue workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Venues): `src/application/Features/Venues`
- [Event workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Events): `src/application/Features/Events`
- [Seat workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Seats): `src/application/Features/Seats`
- [Reservation workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Reservations): `src/application/Features/Reservations`
- [Order workflows](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Features/Orders): `src/application/Features/Orders`
- [Repository contracts](https://github.com/grb10988/event-reservation-api/tree/main/src/application/Interfaces): `src/application/Interfaces`
- [Integration dispatcher](https://github.com/grb10988/event-reservation-api/blob/main/src/application/Abstractions/IntegrationEvents/IntegrationEventDispatcher.cs): `src/application/Abstractions/IntegrationEvents/IntegrationEventDispatcher.cs`

### Domain model

- [Reservation models](https://github.com/grb10988/event-reservation-api/tree/main/src/domain/Models): `src/domain/Models`
- [Result handling](https://github.com/grb10988/event-reservation-api/blob/main/src/domain/Results/Result.cs): `src/domain/Results/Result.cs`

### Persistence

- [SQL repositories](https://github.com/grb10988/event-reservation-api/tree/main/src/infrastructure/Persistence/Repositories): `src/infrastructure/Persistence/Repositories`
- [Postgres connection](https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Persistence/NpgsqlConnectionFactory.cs): `src/infrastructure/Persistence/NpgsqlConnectionFactory.cs`

### Messaging

- [RabbitMQ consumer](https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Messaging/Consumers/RabbitMqConsumerWorker.cs): `src/infrastructure/Messaging/Consumers/RabbitMqConsumerWorker.cs`
- [RabbitMQ publisher](https://github.com/grb10988/event-reservation-api/blob/main/src/infrastructure/Messaging/Publishers/RabbitMqPublisher.cs): `src/infrastructure/Messaging/Publishers/RabbitMqPublisher.cs`

### Other components

- **API caller**
- **PostgreSQL**
- **RabbitMQ broker**
- **OTLP collector**

## Connections

- API caller → API host: sends HTTP
- API host → Customer endpoints: maps routes
- API host → Event endpoints: maps routes
- API host → Venue endpoints: maps routes
- API host → Seat endpoints: maps routes
- API host → Reservation endpoints: maps routes
- API host → Order endpoints: maps routes
- Customer endpoints → Request dispatcher: dispatches requests
- Event endpoints → Request dispatcher: dispatches requests
- Venue endpoints → Request dispatcher: dispatches requests
- Seat endpoints → Request dispatcher: dispatches requests
- Reservation endpoints → Request dispatcher: dispatches requests
- Order endpoints → Request dispatcher: dispatches requests
- Request dispatcher → Request pipeline: handles requests
- Request pipeline → Customer workflows: invokes handler
- Request pipeline → Venue workflows: invokes handler
- Request pipeline → Event workflows: invokes handler
- Request pipeline → Seat workflows: invokes handler
- Request pipeline → Reservation workflows: invokes handler
- Request pipeline → Order workflows: invokes handler
- Customer workflows → Repository contracts: uses contracts
- Venue workflows → Repository contracts: uses contracts
- Event workflows → Repository contracts: uses contracts
- Seat workflows → Repository contracts: uses contracts
- Reservation workflows → Repository contracts: uses contracts
- Order workflows → Repository contracts: uses contracts
- Repository contracts → SQL repositories: implemented by
- SQL repositories → Postgres connection: opens connections
- Postgres connection → PostgreSQL: connects to
- SQL repositories → PostgreSQL: queries and updates
- Customer workflows → Reservation models: uses models
- Venue workflows → Reservation models: uses models
- Event workflows → Reservation models: uses models
- Seat workflows → Reservation models: uses models
- Reservation workflows → Reservation models: uses models
- Order workflows → Reservation models: uses models
- RabbitMQ consumer → RabbitMQ broker: consumes messages
- RabbitMQ consumer → Integration dispatcher: dispatches events
- RabbitMQ publisher → RabbitMQ broker: publishes events
- API host → Telemetry export: configures
- Telemetry export → OTLP collector: exports telemetry
