How tanishq0512/concurrency-safe-movie-booking-system works
BookMyScreen is a movie-discovery and seat-booking platform whose central workflow runs from browsing a movie and show, through selecting and holding seats, to confirming a booking. The backend coordinates temporary Redis seat locks with MongoDB booking transactions and uniqueness constraints; cancellation can free seats and advance a FIFO waitlist. The graph also covers authentication and catalog browsing. Some links rely on README documentation or SOURCE INDEX references; unsampled implementation details and uncertain wiring are omitted.
Main entry points: app.ts Express API · index.js API client · App.jsx Client routes · booking.controller.ts Hold and confirm bookings
Components 21
React client
- Client routes
bms-frontend/src/App.jsx - Auth state
bms-frontend/src/context/AuthContext.jsx - API client
bms-frontend/src/apis/index.js - Movie and show browsing
bms-frontend/src/pages/MovieDetails.jsx - Seat selection
bms-frontend/src/pages/SeatSelection.jsx - Interactive seat map
bms-frontend/src/components/SeatMap.jsx - Booking confirmation
bms-frontend/src/pages/BookingConfirm.jsx - Booking history
bms-frontend/src/pages/MyBookings.jsx
API and identity
- Express API
bms-backend/src/app.ts - Authentication
bms-backend/src/modules/user/user.controller.ts - Cookie auth middleware
bms-backend/src/middlewares/auth.middleware.ts
Movie catalog
- Movie catalog
bms-backend/src/modules/movie/movie.controller.ts - Theater catalog
bms-backend/src/modules/theater/theater.controller.ts - Show and seat layout
bms-backend/src/modules/show/show.controller.ts
Booking coordination
- Hold and confirm bookings
bms-backend/src/modules/booking/booking.controller.ts - Seat lock service
bms-backend/src/services/lock.service.ts - Waitlist endpoints
bms-backend/src/modules/waitlist/waitlist.controller.ts - FIFO waitlist service
bms-backend/src/services/waitlist.service.ts
Persistence and queues
- MongoDB
- Redis
Other components
- Moviegoer
Connections 30
- Moviegoer → Client routes: uses
README.md - Client routes → Movie and show browsing: routes to
bms-frontend/src/App.jsx - Client routes → Seat selection: routes to
bms-frontend/src/App.jsx - Client routes → Booking confirmation: routes to
bms-frontend/src/App.jsx - Client routes → Booking history: routes to
bms-frontend/src/App.jsx - Seat selection → Interactive seat map: renders
bms-frontend/src/pages/SeatSelection.jsx - Auth state → API client: calls
bms-frontend/src/context/AuthContext.jsx - Movie and show browsing → API client: requests catalog
bms-frontend/src/pages/MovieDetails.jsx - Seat selection → API client: requests seats
bms-frontend/src/pages/SeatSelection.jsx - Booking confirmation → API client: confirms booking
bms-frontend/src/pages/BookingConfirm.jsx - Booking history → API client: loads bookings
bms-frontend/src/pages/MyBookings.jsx - API client → Express API: HTTP requests
README.md - Express API → Authentication: routes auth
bms-backend/src/app.ts - Express API → Movie catalog: routes movies
bms-backend/src/app.ts - Express API → Theater catalog: routes theaters
bms-backend/src/app.ts - Express API → Show and seat layout: routes shows
bms-backend/src/app.ts - Express API → Hold and confirm bookings: routes bookings
bms-backend/src/app.ts - Express API → Waitlist endpoints: routes waitlist
bms-backend/src/app.ts - Authentication → MongoDB: reads and writes users
bms-backend/src/modules/user/user.controller.ts - Cookie auth middleware → Authentication: verifies tokens
bms-backend/src/middlewares/auth.middleware.ts - Movie catalog → MongoDB: reads movies
bms-backend/src/modules/movie/movie.controller.ts - Theater catalog → MongoDB: reads theaters
bms-backend/src/modules/theater/theater.controller.ts - Show and seat layout → MongoDB: reads shows
bms-backend/src/modules/show/show.controller.ts - Hold and confirm bookings → MongoDB: persists bookings
bms-backend/src/modules/booking/booking.controller.ts - Hold and confirm bookings → Seat lock service: acquires and releases
bms-backend/src/modules/booking/booking.controller.ts - Seat lock service → Redis: manages seat locks
README.md - Hold and confirm bookings → FIFO waitlist service: advances queue
bms-backend/src/modules/booking/booking.controller.ts - Waitlist endpoints → FIFO waitlist service: manages queue
bms-backend/src/modules/waitlist/waitlist.controller.ts - Waitlist endpoints → MongoDB: checks booked seats
bms-backend/src/modules/waitlist/waitlist.controller.ts - FIFO waitlist service → Redis: stores sorted queues
README.md