# akramsabir/ticket-hub-phase2 architecture

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

- Interactive diagram: https://gitdiagram.com/akramsabir/ticket-hub-phase2
- Repository: https://github.com/akramsabir/ticket-hub-phase2

## Overview

TicketHub is a multi-service ticketing platform: users authenticate, browse event and seat inventory, create bookings, and complete payment; booking and payment services also handle asynchronous saga events, while notification-service sends event-driven messages. The tree shows separate gateway, registry, catalog, user, booking, payment, and notification services. Sampled excerpts establish selected service calls and persistence/channel interactions; where cross-service wiring or unsampled implementations are not evidenced, relationships are omitted or marked unverified.

Main entry points: [`booking-service/src/main/java/com/tickethub/booking/service/impl/BookingServiceImpl.java`](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/service/impl/BookingServiceImpl.java) (Booking and saga), [`notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java`](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java) (Notification delivery), [`payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java`](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java) (Payment lifecycle), [`user-service/src/main/java/com/tickethub/userservice/service/AuthService.java`](https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/service/AuthService.java) (User authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Access and identity"]
  node_gateway["API gateway"]
  node_auth["User authentication<br/>[AuthService.java]"]
  node_userstore[("User records")]
  node_jwt["JWT issuing<br/>[JwtService.java]"]
  node_registry["Service registry"]
end

subgraph group_catalog["Event inventory"]
  node_catalogapi["Event and seat API"]
  node_cataloglogic["Catalog operations<br/>[EventService.java]"]
  node_catalogstore[("Catalog records")]
end

subgraph group_booking["Booking workflow"]
  node_bookingapi["Booking API"]
  node_bookinglogic["Booking and saga"]
  node_bookingstore[("Booking records")]
  node_eventclient["Inventory client"]
  node_payclient["Payment client"]
end

subgraph group_payment["Payment processing"]
  node_paymentapi["Payment API"]
  node_paymentlogic["Payment lifecycle"]
  node_paymentstore[("Payment records")]
  node_paygateway["Payment provider"]
  node_webhook["Provider webhooks"]
end

subgraph group_notify["Notifications"]
  node_notifylistener["Booking event listeners"]
  node_notifylogic["Notification delivery"]
  node_notifyrender["Message rendering"]
  node_notifystore[("Notification records")]
  node_email["Email channel<br/>[EmailChannel.java]"]
end

node_customer(("Customer or admin"))

node_customer -.->|"sends requests"| node_gateway
node_gateway -.->|"routes requests"| node_auth
node_auth -->|"reads and saves"| node_userstore
node_auth -->|"issues token"| node_jwt
node_catalogapi -.->|"delegates"| node_cataloglogic
node_cataloglogic -.->|"uses repository"| node_catalogstore
node_bookingapi -.->|"delegates"| node_bookinglogic
node_bookinglogic -.->|"persists bookings"| node_bookingstore
node_bookinglogic -.->|"validates seats"| node_eventclient
node_eventclient -->|"requests inventory"| node_catalogapi
node_bookinglogic -.->|"requests payment"| node_payclient
node_payclient -.->|"calls payment API"| node_paymentapi
node_paymentapi -->|"delegates"| node_paymentlogic
node_paymentlogic -.->|"uses repository"| node_paymentstore
node_paymentlogic -.->|"uses provider"| node_paygateway
node_webhook -->|"applies provider events"| node_paymentlogic
node_notifylistener -.->|"submits notifications"| node_notifylogic
node_notifylogic -->|"renders message"| node_notifyrender
node_notifylogic -->|"reads and saves"| node_notifystore
node_notifylogic -->|"delivers message"| node_email

click node_gateway "https://github.com/akramsabir/ticket-hub-phase2/blob/main/api-gateway/src/main/java/com/tickethub/gateway/ApiGatewayApplication.java"
click node_auth "https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/service/AuthService.java"
click node_userstore "https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/repository/UserRepository.java"
click node_jwt "https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/security/JwtService.java"
click node_registry "https://github.com/akramsabir/ticket-hub-phase2/blob/main/service-registry/src/main/java/com/tickethub/registry/ServiceRegistryApplication.java"
click node_catalogapi "https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/controller/EventController.java"
click node_cataloglogic "https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/service/EventService.java"
click node_catalogstore "https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/repository/EventRepository.java"
click node_bookingapi "https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/controller/BookingController.java"
click node_bookinglogic "https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/service/impl/BookingServiceImpl.java"
click node_bookingstore "https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/repository/BookingRepository.java"
click node_eventclient "https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/client/EventClientService.java"
click node_payclient "https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/client/PaymentClientService.java"
click node_paymentapi "https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/controller/PaymentController.java"
click node_paymentlogic "https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java"
click node_paymentstore "https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/repository/PaymentRepository.java"
click node_paygateway "https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/gateway/PaymentGateway.java"
click node_webhook "https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/service/PaymentWebhookService.java"
click node_notifylistener "https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/kafka/BookingEventListener.java"
click node_notifylogic "https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java"
click node_notifyrender "https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/service/NotificationRenderer.java"
click node_notifystore "https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/repository/NotificationRepository.java"
click node_email "https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/channel/EmailChannel.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,node_auth,node_userstore,node_jwt,node_registry toneBlue
class node_catalogapi,node_cataloglogic,node_catalogstore toneAmber
class node_bookingapi,node_bookinglogic,node_bookingstore,node_eventclient,node_payclient toneMint
class node_paymentapi,node_paymentlogic,node_paymentstore,node_paygateway,node_webhook toneRose
class node_notifylistener,node_notifylogic,node_notifyrender,node_notifystore,node_email,node_customer toneIndigo
```

## Components

### Access and identity

- [API gateway](https://github.com/akramsabir/ticket-hub-phase2/blob/main/api-gateway/src/main/java/com/tickethub/gateway/ApiGatewayApplication.java): `api-gateway/src/main/java/com/tickethub/gateway/ApiGatewayApplication.java`
- [User authentication](https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/service/AuthService.java): `user-service/src/main/java/com/tickethub/userservice/service/AuthService.java`
- [User records](https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/repository/UserRepository.java): `user-service/src/main/java/com/tickethub/userservice/repository/UserRepository.java`
- [JWT issuing](https://github.com/akramsabir/ticket-hub-phase2/blob/main/user-service/src/main/java/com/tickethub/userservice/security/JwtService.java): `user-service/src/main/java/com/tickethub/userservice/security/JwtService.java`
- [Service registry](https://github.com/akramsabir/ticket-hub-phase2/blob/main/service-registry/src/main/java/com/tickethub/registry/ServiceRegistryApplication.java): `service-registry/src/main/java/com/tickethub/registry/ServiceRegistryApplication.java`

### Event inventory

- [Event and seat API](https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/controller/EventController.java): `ticket-hub/src/main/java/com/tickethub/booking/service/controller/EventController.java`
- [Catalog operations](https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/service/EventService.java): `ticket-hub/src/main/java/com/tickethub/booking/service/service/EventService.java`
- [Catalog records](https://github.com/akramsabir/ticket-hub-phase2/blob/main/ticket-hub/src/main/java/com/tickethub/booking/service/repository/EventRepository.java): `ticket-hub/src/main/java/com/tickethub/booking/service/repository/EventRepository.java`

### Booking workflow

- [Booking API](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/controller/BookingController.java): `booking-service/src/main/java/com/tickethub/booking/controller/BookingController.java`
- [Booking and saga](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/service/impl/BookingServiceImpl.java): `booking-service/src/main/java/com/tickethub/booking/service/impl/BookingServiceImpl.java`
- [Booking records](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/repository/BookingRepository.java): `booking-service/src/main/java/com/tickethub/booking/repository/BookingRepository.java`
- [Inventory client](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/client/EventClientService.java): `booking-service/src/main/java/com/tickethub/booking/client/EventClientService.java`
- [Payment client](https://github.com/akramsabir/ticket-hub-phase2/blob/main/booking-service/src/main/java/com/tickethub/booking/client/PaymentClientService.java): `booking-service/src/main/java/com/tickethub/booking/client/PaymentClientService.java`

### Payment processing

- [Payment API](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/controller/PaymentController.java): `payment-service/src/main/java/com/tickethub/payment/controller/PaymentController.java`
- [Payment lifecycle](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java): `payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java`
- [Payment records](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/repository/PaymentRepository.java): `payment-service/src/main/java/com/tickethub/payment/repository/PaymentRepository.java`
- [Payment provider](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/gateway/PaymentGateway.java): `payment-service/src/main/java/com/tickethub/payment/gateway/PaymentGateway.java`
- [Provider webhooks](https://github.com/akramsabir/ticket-hub-phase2/blob/main/payment-service/src/main/java/com/tickethub/payment/service/PaymentWebhookService.java): `payment-service/src/main/java/com/tickethub/payment/service/PaymentWebhookService.java`

### Notifications

- [Booking event listeners](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/kafka/BookingEventListener.java): `notification-service/src/main/java/com/tickethub/notification/kafka/BookingEventListener.java`
- [Notification delivery](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java): `notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java`
- [Message rendering](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/service/NotificationRenderer.java): `notification-service/src/main/java/com/tickethub/notification/service/NotificationRenderer.java`
- [Notification records](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/repository/NotificationRepository.java): `notification-service/src/main/java/com/tickethub/notification/repository/NotificationRepository.java`
- [Email channel](https://github.com/akramsabir/ticket-hub-phase2/blob/main/notification-service/src/main/java/com/tickethub/notification/channel/EmailChannel.java): `notification-service/src/main/java/com/tickethub/notification/channel/EmailChannel.java`

### Other components

- **Customer or admin**

## Connections

- Customer or admin → API gateway: sends requests
- API gateway → User authentication: routes requests
- User authentication → User records: reads and saves (evidence: `user-service/src/main/java/com/tickethub/userservice/service/AuthService.java`)
- User authentication → JWT issuing: issues token (evidence: `user-service/src/main/java/com/tickethub/userservice/service/AuthService.java`)
- Event and seat API → Catalog operations: delegates
- Catalog operations → Catalog records: uses repository
- Booking API → Booking and saga: delegates
- Booking and saga → Booking records: persists bookings
- Booking and saga → Inventory client: validates seats
- Inventory client → Event and seat API: requests inventory (evidence: `booking-service/src/main/java/com/tickethub/booking/client/EventClientService.java`)
- Booking and saga → Payment client: requests payment
- Payment client → Payment API: calls payment API
- Payment API → Payment lifecycle: delegates (evidence: `payment-service/src/main/java/com/tickethub/payment/controller/PaymentController.java`)
- Payment lifecycle → Payment records: uses repository (evidence: `payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java`)
- Payment lifecycle → Payment provider: uses provider (evidence: `payment-service/src/main/java/com/tickethub/payment/service/PaymentService.java`)
- Provider webhooks → Payment lifecycle: applies provider events (evidence: `payment-service/src/main/java/com/tickethub/payment/service/PaymentWebhookService.java`)
- Booking event listeners → Notification delivery: submits notifications
- Notification delivery → Message rendering: renders message (evidence: `notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java`)
- Notification delivery → Notification records: reads and saves (evidence: `notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java`)
- Notification delivery → Email channel: delivers message (evidence: `notification-service/src/main/java/com/tickethub/notification/service/NotificationService.java`)
