# tanishq0512/concurrency-safe-movie-booking-system architecture

> Architecture diagram of the GitHub repository tanishq0512/concurrency-safe-movie-booking-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tanishq0512/concurrency-safe-movie-booking-system
- Repository: https://github.com/tanishq0512/concurrency-safe-movie-booking-system

## Overview

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: [`bms-backend/src/app.ts`](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/app.ts) (Express API), [`bms-frontend/src/apis/index.js`](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/apis/index.js) (API client), [`bms-frontend/src/App.jsx`](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/App.jsx) (Client routes), [`bms-backend/src/modules/booking/booking.controller.ts`](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/booking/booking.controller.ts) (Hold and confirm bookings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_webapp["Client routes<br/>[App.jsx]"]
  node_authui["Auth state<br/>[AuthContext.jsx]"]
  node_api_client["API client<br/>[index.js]"]
  node_discovery["Movie and show browsing<br/>[MovieDetails.jsx]"]
  node_seatflow["Seat selection<br/>[SeatSelection.jsx]"]
  node_seatmap["Interactive seat map<br/>[SeatMap.jsx]"]
  node_confirmation["Booking confirmation<br/>[BookingConfirm.jsx]"]
  node_bookinghistory["Booking history<br/>[MyBookings.jsx]"]
end

subgraph group_api["API and identity"]
  node_gateway["Express API<br/>[app.ts]"]
  node_auth["Authentication<br/>[user.controller.ts]"]
  node_authguard["Cookie auth middleware<br/>[auth.middleware.ts]"]
end

subgraph group_catalog["Movie catalog"]
  node_movies["Movie catalog"]
  node_theaters["Theater catalog"]
  node_shows["Show and seat layout<br/>[show.controller.ts]"]
end

subgraph group_booking["Booking coordination"]
  node_booking["Hold and confirm bookings"]
  node_locksvc["Seat lock service<br/>[lock.service.ts]"]
  node_waitlist_api["Waitlist endpoints"]
  node_waitlist["FIFO waitlist service"]
end

subgraph group_state["Persistence and queues"]
  node_mongo[("MongoDB")]
  node_redis[("Redis")]
end

node_customer(("Moviegoer"))

node_customer -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_discovery
node_webapp -->|"routes to"| node_seatflow
node_webapp -->|"routes to"| node_confirmation
node_webapp -->|"routes to"| node_bookinghistory
node_seatflow -->|"renders"| node_seatmap
node_authui -->|"calls"| node_api_client
node_discovery -->|"requests catalog"| node_api_client
node_seatflow -->|"requests seats"| node_api_client
node_confirmation -->|"confirms booking"| node_api_client
node_bookinghistory -->|"loads bookings"| node_api_client
node_api_client -->|"HTTP requests"| node_gateway
node_gateway -->|"routes auth"| node_auth
node_gateway -->|"routes movies"| node_movies
node_gateway -->|"routes theaters"| node_theaters
node_gateway -->|"routes shows"| node_shows
node_gateway -->|"routes bookings"| node_booking
node_gateway -->|"routes waitlist"| node_waitlist_api
node_auth -->|"reads and writes users"| node_mongo
node_authguard -->|"verifies tokens"| node_auth
node_movies -->|"reads movies"| node_mongo
node_theaters -->|"reads theaters"| node_mongo
node_shows -->|"reads shows"| node_mongo
node_booking -->|"persists bookings"| node_mongo
node_booking -->|"acquires and releases"| node_locksvc
node_locksvc -->|"manages seat locks"| node_redis
node_booking -->|"advances queue"| node_waitlist
node_waitlist_api -->|"manages queue"| node_waitlist
node_waitlist_api -->|"checks booked seats"| node_mongo
node_waitlist -->|"stores sorted queues"| node_redis

click node_webapp "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/App.jsx"
click node_authui "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/context/AuthContext.jsx"
click node_api_client "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/apis/index.js"
click node_discovery "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/MovieDetails.jsx"
click node_seatflow "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/SeatSelection.jsx"
click node_seatmap "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/components/SeatMap.jsx"
click node_confirmation "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/BookingConfirm.jsx"
click node_bookinghistory "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/MyBookings.jsx"
click node_gateway "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/app.ts"
click node_auth "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/user/user.controller.ts"
click node_authguard "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/middlewares/auth.middleware.ts"
click node_movies "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/movie/movie.controller.ts"
click node_theaters "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/theater/theater.controller.ts"
click node_shows "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/show/show.controller.ts"
click node_booking "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/booking/booking.controller.ts"
click node_locksvc "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/services/lock.service.ts"
click node_waitlist_api "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/waitlist/waitlist.controller.ts"
click node_waitlist "https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/services/waitlist.service.ts"

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_webapp,node_authui,node_api_client,node_discovery,node_seatflow,node_seatmap,node_confirmation,node_bookinghistory toneBlue
class node_gateway,node_auth,node_authguard toneAmber
class node_movies,node_theaters,node_shows toneMint
class node_booking,node_locksvc,node_waitlist_api,node_waitlist toneRose
class node_mongo,node_redis,node_customer toneIndigo
```

## Components

### React client

- [Client routes](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/App.jsx): `bms-frontend/src/App.jsx`
- [Auth state](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/context/AuthContext.jsx): `bms-frontend/src/context/AuthContext.jsx`
- [API client](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/apis/index.js): `bms-frontend/src/apis/index.js`
- [Movie and show browsing](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/MovieDetails.jsx): `bms-frontend/src/pages/MovieDetails.jsx`
- [Seat selection](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/SeatSelection.jsx): `bms-frontend/src/pages/SeatSelection.jsx`
- [Interactive seat map](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/components/SeatMap.jsx): `bms-frontend/src/components/SeatMap.jsx`
- [Booking confirmation](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/BookingConfirm.jsx): `bms-frontend/src/pages/BookingConfirm.jsx`
- [Booking history](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-frontend/src/pages/MyBookings.jsx): `bms-frontend/src/pages/MyBookings.jsx`

### API and identity

- [Express API](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/app.ts): `bms-backend/src/app.ts`
- [Authentication](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/user/user.controller.ts): `bms-backend/src/modules/user/user.controller.ts`
- [Cookie auth middleware](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/middlewares/auth.middleware.ts): `bms-backend/src/middlewares/auth.middleware.ts`

### Movie catalog

- [Movie catalog](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/movie/movie.controller.ts): `bms-backend/src/modules/movie/movie.controller.ts`
- [Theater catalog](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/theater/theater.controller.ts): `bms-backend/src/modules/theater/theater.controller.ts`
- [Show and seat layout](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/show/show.controller.ts): `bms-backend/src/modules/show/show.controller.ts`

### Booking coordination

- [Hold and confirm bookings](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/booking/booking.controller.ts): `bms-backend/src/modules/booking/booking.controller.ts`
- [Seat lock service](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/services/lock.service.ts): `bms-backend/src/services/lock.service.ts`
- [Waitlist endpoints](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/modules/waitlist/waitlist.controller.ts): `bms-backend/src/modules/waitlist/waitlist.controller.ts`
- [FIFO waitlist service](https://github.com/tanishq0512/concurrency-safe-movie-booking-system/blob/main/bms-backend/src/services/waitlist.service.ts): `bms-backend/src/services/waitlist.service.ts`

### Persistence and queues

- **MongoDB**
- **Redis**

### Other components

- **Moviegoer**

## Connections

- Moviegoer → Client routes: uses (evidence: `README.md`)
- Client routes → Movie and show browsing: routes to (evidence: `bms-frontend/src/App.jsx`)
- Client routes → Seat selection: routes to (evidence: `bms-frontend/src/App.jsx`)
- Client routes → Booking confirmation: routes to (evidence: `bms-frontend/src/App.jsx`)
- Client routes → Booking history: routes to (evidence: `bms-frontend/src/App.jsx`)
- Seat selection → Interactive seat map: renders (evidence: `bms-frontend/src/pages/SeatSelection.jsx`)
- Auth state → API client: calls (evidence: `bms-frontend/src/context/AuthContext.jsx`)
- Movie and show browsing → API client: requests catalog (evidence: `bms-frontend/src/pages/MovieDetails.jsx`)
- Seat selection → API client: requests seats (evidence: `bms-frontend/src/pages/SeatSelection.jsx`)
- Booking confirmation → API client: confirms booking (evidence: `bms-frontend/src/pages/BookingConfirm.jsx`)
- Booking history → API client: loads bookings (evidence: `bms-frontend/src/pages/MyBookings.jsx`)
- API client → Express API: HTTP requests (evidence: `README.md`)
- Express API → Authentication: routes auth (evidence: `bms-backend/src/app.ts`)
- Express API → Movie catalog: routes movies (evidence: `bms-backend/src/app.ts`)
- Express API → Theater catalog: routes theaters (evidence: `bms-backend/src/app.ts`)
- Express API → Show and seat layout: routes shows (evidence: `bms-backend/src/app.ts`)
- Express API → Hold and confirm bookings: routes bookings (evidence: `bms-backend/src/app.ts`)
- Express API → Waitlist endpoints: routes waitlist (evidence: `bms-backend/src/app.ts`)
- Authentication → MongoDB: reads and writes users (evidence: `bms-backend/src/modules/user/user.controller.ts`)
- Cookie auth middleware → Authentication: verifies tokens (evidence: `bms-backend/src/middlewares/auth.middleware.ts`)
- Movie catalog → MongoDB: reads movies (evidence: `bms-backend/src/modules/movie/movie.controller.ts`)
- Theater catalog → MongoDB: reads theaters (evidence: `bms-backend/src/modules/theater/theater.controller.ts`)
- Show and seat layout → MongoDB: reads shows (evidence: `bms-backend/src/modules/show/show.controller.ts`)
- Hold and confirm bookings → MongoDB: persists bookings (evidence: `bms-backend/src/modules/booking/booking.controller.ts`)
- Hold and confirm bookings → Seat lock service: acquires and releases (evidence: `bms-backend/src/modules/booking/booking.controller.ts`)
- Seat lock service → Redis: manages seat locks (evidence: `README.md`)
- Hold and confirm bookings → FIFO waitlist service: advances queue (evidence: `bms-backend/src/modules/booking/booking.controller.ts`)
- Waitlist endpoints → FIFO waitlist service: manages queue (evidence: `bms-backend/src/modules/waitlist/waitlist.controller.ts`)
- Waitlist endpoints → MongoDB: checks booked seats (evidence: `bms-backend/src/modules/waitlist/waitlist.controller.ts`)
- FIFO waitlist service → Redis: stores sorted queues (evidence: `README.md`)
