# rahulkumarnitp/bookmyshow-lowleveldesign architecture

> Architecture diagram of the GitHub repository rahulkumarnitp/bookmyshow-lowleveldesign, 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/rahulkumarnitp/bookmyshow-lowleveldesign
- Repository: https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign

## Overview

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: [`src/main/java/services/SeatAvailiabilityService.java`](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/SeatAvailiabilityService.java) (Seat Availability), [`src/main/java/services/PaymentService.java`](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/PaymentService.java) (Payment Service), [`src/main/java/services/BookingService.java`](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/BookingService.java) (Booking Service), [`src/main/java/model/Booking.java`](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Booking.java) (Booking)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Movie Catalog"]
  node_movie_service["Movie Service<br/>[MovieService.java]"]
  node_movie["Movie<br/>[Movie.java]"]
end

subgraph group_venue["Venues and Shows"]
  node_theater_service["Theater Service"]
  node_theatre["Theatre<br/>[Theatre.java]"]
  node_screen["Screen<br/>[Screen.java]"]
  node_show_service["Show Service<br/>[ShowService.java]"]
  node_show["Show<br/>[Show.java]"]
end

subgraph group_booking["Booking and Seats"]
  node_seat["Seat<br/>[Seat.java]"]
  node_availability["Seat Availability"]
  node_booking_service["Booking Service"]
  node_booking_model["Booking<br/>[Booking.java]"]
  node_lock_provider["Seat Lock Provider"]
  node_memory_locks["In-memory Locks"]
  node_seat_lock["Seat Lock<br/>[SeatLock.java]"]
end

subgraph group_payment["Payment"]
  node_payment_service["Payment Service"]
  node_payment_model["Payment<br/>[Payment.java]"]
end

node_user(("User"))

node_user -->|"requests seats"| node_availability
node_user -->|"selects seats"| node_booking_service
node_user -->|"pays for booking"| node_payment_service
node_movie_service -->|"creates and returns"| node_movie
node_theater_service -->|"creates and updates"| node_theatre
node_theater_service -->|"creates and adds"| node_screen
node_theater_service -->|"creates and adds"| node_seat
node_show_service -->|"creates and stores"| node_show
node_show_service -->|"checks screen schedule"| node_screen
node_show_service -->|"uses movie"| node_movie
node_availability -->|"reads seats from"| node_show
node_availability -->|"gets booked seats"| node_booking_service
node_availability -->|"gets locked seats"| node_lock_provider
node_booking_service -->|"locks selected seats"| node_lock_provider
node_booking_service -->|"creates booking"| node_booking_model
node_booking_model -->|"references show"| node_show
node_booking_model -->|"holds booked seats"| node_seat
node_memory_locks -->|"implements"| node_lock_provider
node_memory_locks -->|"creates and tracks"| node_seat_lock
node_memory_locks -->|"locks by seat"| node_seat
node_payment_service -->|"uses booking"| node_booking_model
node_payment_service -->|"uses seat locks"| node_lock_provider
node_payment_service -.->|"records payment"| node_payment_model

click node_movie_service "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/MovieService.java"
click node_movie "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Movie.java"
click node_theater_service "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/TheaterService.java"
click node_theatre "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Theatre.java"
click node_screen "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Screen.java"
click node_show_service "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/ShowService.java"
click node_show "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Show.java"
click node_seat "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Seat.java"
click node_availability "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/SeatAvailiabilityService.java"
click node_booking_service "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/BookingService.java"
click node_booking_model "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Booking.java"
click node_lock_provider "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/providers/SeatLockProvider.java"
click node_memory_locks "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/providers/InMemorySeatLockProvider.java"
click node_seat_lock "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/SeatLock.java"
click node_payment_service "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/PaymentService.java"
click node_payment_model "https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Payment.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_movie_service,node_movie,node_user toneBlue
class node_theater_service,node_theatre,node_screen,node_show_service,node_show toneAmber
class node_seat,node_availability,node_booking_service,node_booking_model,node_lock_provider,node_memory_locks,node_seat_lock toneMint
class node_payment_service,node_payment_model toneRose
```

## Components

### Movie Catalog

- [Movie Service](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/MovieService.java): `src/main/java/services/MovieService.java`
- [Movie](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Movie.java): `src/main/java/model/Movie.java`

### Venues and Shows

- [Theater Service](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/TheaterService.java): `src/main/java/services/TheaterService.java`
- [Theatre](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Theatre.java): `src/main/java/model/Theatre.java`
- [Screen](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Screen.java): `src/main/java/model/Screen.java`
- [Show Service](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/ShowService.java): `src/main/java/services/ShowService.java`
- [Show](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Show.java): `src/main/java/model/Show.java`

### Booking and Seats

- [Seat](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Seat.java): `src/main/java/model/Seat.java`
- [Seat Availability](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/SeatAvailiabilityService.java): `src/main/java/services/SeatAvailiabilityService.java`
- [Booking Service](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/BookingService.java): `src/main/java/services/BookingService.java`
- [Booking](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Booking.java): `src/main/java/model/Booking.java`
- [Seat Lock Provider](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/providers/SeatLockProvider.java): `src/main/java/providers/SeatLockProvider.java`
- [In-memory Locks](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/providers/InMemorySeatLockProvider.java): `src/main/java/providers/InMemorySeatLockProvider.java`
- [Seat Lock](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/SeatLock.java): `src/main/java/model/SeatLock.java`

### Payment

- [Payment Service](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/services/PaymentService.java): `src/main/java/services/PaymentService.java`
- [Payment](https://github.com/rahulkumarnitp/bookmyshow-lowleveldesign/blob/master/src/main/java/model/Payment.java): `src/main/java/model/Payment.java`

### Other components

- **User**

## Connections

- User → Seat Availability: requests seats (evidence: `README.md`)
- User → Booking Service: selects seats (evidence: `README.md`)
- User → Payment Service: pays for booking (evidence: `README.md`)
- Movie Service → Movie: creates and returns (evidence: `src/main/java/services/MovieService.java`)
- Theater Service → Theatre: creates and updates (evidence: `src/main/java/services/TheaterService.java`)
- Theater Service → Screen: creates and adds (evidence: `src/main/java/services/TheaterService.java`)
- Theater Service → Seat: creates and adds (evidence: `src/main/java/services/TheaterService.java`)
- Show Service → Show: creates and stores (evidence: `src/main/java/services/ShowService.java`)
- Show Service → Screen: checks screen schedule (evidence: `src/main/java/services/ShowService.java`)
- Show Service → Movie: uses movie (evidence: `src/main/java/services/ShowService.java`)
- Seat Availability → Show: reads seats from (evidence: `src/main/java/services/SeatAvailiabilityService.java`)
- Seat Availability → Booking Service: gets booked seats (evidence: `src/main/java/services/SeatAvailiabilityService.java`)
- Seat Availability → Seat Lock Provider: gets locked seats (evidence: `src/main/java/services/SeatAvailiabilityService.java`)
- Booking Service → Seat Lock Provider: locks selected seats (evidence: `src/main/java/services/BookingService.java`)
- Booking Service → Booking: creates booking (evidence: `src/main/java/services/BookingService.java`)
- Booking → Show: references show (evidence: `src/main/java/model/Booking.java`)
- Booking → Seat: holds booked seats (evidence: `src/main/java/model/Booking.java`)
- In-memory Locks → Seat Lock Provider: implements (evidence: `src/main/java/providers/InMemorySeatLockProvider.java`)
- In-memory Locks → Seat Lock: creates and tracks (evidence: `src/main/java/providers/InMemorySeatLockProvider.java`)
- In-memory Locks → Seat: locks by seat (evidence: `src/main/java/providers/InMemorySeatLockProvider.java`)
- Payment Service → Booking: uses booking (evidence: `src/main/java/services/PaymentService.java`)
- Payment Service → Seat Lock Provider: uses seat locks (evidence: `src/main/java/services/PaymentService.java`)
- Payment Service → Payment: records payment
