How aritiaya50217/high-concurrency-ticket-booking-system works
This repository implements a ticket-booking platform with separate booking, event/seat, and user services. A customer submits a booking through the booking HTTP API; booking logic coordinates seat availability and user identity, persists booking state and an outbox event, and publishes it for the event service to reserve the seat. Expiration similarly cancels bookings and emits events so seats can be released. The user service provides HTTP account flows and a gRPC identity API. The README documents the Inbox/Outbox and concurrency guarantees; some detailed wiring is inferred from that documentation because those sources were not sampled.
Main entry points: booking_usecase.go Booking Workflow · event_usecase.go Event Workflow · event_handler.go Event HTTP API · booking_created_consumer.go Booking Event Consumer
Components 26
Booking Service
- Booking HTTP API
booking-service/internal/interface/handler/booking_handler.go - Booking Workflow
booking-service/internal/application/usecase/booking_usecase.go - Booking State
booking-service/internal/domain/aggregate/booking.go - Booking Repository
booking-service/internal/infrastructure/repository/booking_repository_impl.go - Booking Database
booking-service/internal/infrastructure/database/postgres.go - Expiration Worker
booking-service/internal/worker/booking_expiration_worker.go - Outbox Worker
booking-service/internal/worker/outbox_worker.go - Outbox Repository
booking-service/internal/infrastructure/repository/outbox_repository_impl.go - Booking Consumer
booking-service/internal/worker/booking_consumer.go - Seat Service Client
booking-service/internal/infrastructure/external/eventservice/seat_service_client.go - User gRPC Client
booking-service/internal/infrastructure/grpc/user_service_client.go
Event And Seats
- Event HTTP API
event-service/internal/interface/handler/event_handler.go - Event Workflow
event-service/internal/application/usecase/event_usecase.go - Seat Workflow
event-service/internal/application/usecase/seat_usecase.go - Event Repository
event-service/internal/infrastructure/repository/event_repository_impl.go - Event Database
event-service/internal/infrastructure/database/postgres.go - Booking Event Consumer
event-service/internal/worker/booking_created_consumer.go - Inbox Repository
event-service/internal/infrastructure/repository/inbox_repository_impl.go - Seat Event Producer
event-service/internal/infrastructure/repository/event_producer_repository_impl.go
User Identity
- User HTTP API
user-service/internal/interface/handler/user_handler.go - User Workflow
user-service/internal/application/usecase/user_usecase.go - User gRPC Server
user-service/internal/grpc/user_server.go - User Repository
user-service/internal/infrastructure/repository/user_repository_impl.go - User Database
user-service/internal/infrastructure/database/postgres.go
Event Transport
- Kafka
Other components
- Customer
Connections 29
- Customer → Booking HTTP API: submits booking
- Booking HTTP API → Booking Workflow: calls
- Booking Workflow → Booking State: creates or updates
- Booking Workflow → Booking Repository: persists
- Booking Repository → Booking Database: reads and writes
- Booking Workflow → Seat Service Client: checks seat
- Seat Service Client → Event HTTP API: calls seat API
- Booking Workflow → User gRPC Client: validates user
- User gRPC Client → User gRPC Server: calls
- Expiration Worker → Booking Repository: finds and updates
- Expiration Worker → Outbox Repository: records cancellation
- Outbox Repository → Booking Database: writes outbox
- Outbox Worker → Outbox Repository: polls pending
- Outbox Worker → Kafka: publishes booking events
- Kafka → Booking Event Consumer: delivers booking events
- Booking Event Consumer → Inbox Repository: checks processed
- Booking Event Consumer → Event Workflow: dispatches event
- Event Workflow → Event Repository: loads and updates seats
- Event Repository → Event Database: locks and persists
- Event Workflow → Seat Event Producer: emits seat events
- Seat Event Producer → Kafka: publishes
- Event HTTP API → Event Workflow: calls event workflow
- Event HTTP API → Seat Workflow: calls seat workflow
- Seat Workflow → Event Repository: reserves or releases
- Customer → User HTTP API: registers or logs in
- User HTTP API → User Workflow: calls
- User Workflow → User Repository: reads and writes users
- User Repository → User Database: reads and writes
- User gRPC Server → User Workflow: delegates requests