How rahulkumarnitp/bookmyshow-lowleveldesign works
This repository is an in-memory BookMyShow booking backend. Its documented user flow is to find available seats for a show, select seats to book, temporarily lock them, process payment, and either confirm the booking or release seats. Separate services manage movies, theatres, screens, seats, and shows. The graph includes those domain stages and the seat-lock implementation. Payment behavior is documented, but its source was not excerpted, so payment links rely on the SOURCE INDEX rather than inspected method bodies.
Main entry points: SeatAvailiabilityService.java Seat Availability · PaymentService.java Payment Service · BookingService.java Booking Service · Booking.java Booking
Components 17
Movie Catalog
- Movie Service
src/main/java/services/MovieService.java - Movie
src/main/java/model/Movie.java
Venues and Shows
- Theater Service
src/main/java/services/TheaterService.java - Theatre
src/main/java/model/Theatre.java - Screen
src/main/java/model/Screen.java - Show Service
src/main/java/services/ShowService.java - Show
src/main/java/model/Show.java
Booking and Seats
- Seat
src/main/java/model/Seat.java - Seat Availability
src/main/java/services/SeatAvailiabilityService.java - Booking Service
src/main/java/services/BookingService.java - Booking
src/main/java/model/Booking.java - Seat Lock Provider
src/main/java/providers/SeatLockProvider.java - In-memory Locks
src/main/java/providers/InMemorySeatLockProvider.java - Seat Lock
src/main/java/model/SeatLock.java
Payment
- Payment Service
src/main/java/services/PaymentService.java - Payment
src/main/java/model/Payment.java
Other components
- User
Connections 23
- User → Seat Availability: requests seats
README.md - User → Booking Service: selects seats
README.md - User → Payment Service: pays for booking
README.md - Movie Service → Movie: creates and returns
src/main/java/services/MovieService.java - Theater Service → Theatre: creates and updates
src/main/java/services/TheaterService.java - Theater Service → Screen: creates and adds
src/main/java/services/TheaterService.java - Theater Service → Seat: creates and adds
src/main/java/services/TheaterService.java - Show Service → Show: creates and stores
src/main/java/services/ShowService.java - Show Service → Screen: checks screen schedule
src/main/java/services/ShowService.java - Show Service → Movie: uses movie
src/main/java/services/ShowService.java - Seat Availability → Show: reads seats from
src/main/java/services/SeatAvailiabilityService.java - Seat Availability → Booking Service: gets booked seats
src/main/java/services/SeatAvailiabilityService.java - Seat Availability → Seat Lock Provider: gets locked seats
src/main/java/services/SeatAvailiabilityService.java - Booking Service → Seat Lock Provider: locks selected seats
src/main/java/services/BookingService.java - Booking Service → Booking: creates booking
src/main/java/services/BookingService.java - Booking → Show: references show
src/main/java/model/Booking.java - Booking → Seat: holds booked seats
src/main/java/model/Booking.java - In-memory Locks → Seat Lock Provider: implements
src/main/java/providers/InMemorySeatLockProvider.java - In-memory Locks → Seat Lock: creates and tracks
src/main/java/providers/InMemorySeatLockProvider.java - In-memory Locks → Seat: locks by seat
src/main/java/providers/InMemorySeatLockProvider.java - Payment Service → Booking: uses booking
src/main/java/services/PaymentService.java - Payment Service → Seat Lock Provider: uses seat locks
src/main/java/services/PaymentService.java - Payment Service → Payment: records payment