# nijamgouri60/movie_ticket_booking architecture

> Architecture diagram of the GitHub repository nijamgouri60/movie_ticket_booking, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nijamgouri60/movie_ticket_booking
- Repository: https://github.com/nijamgouri60/movie_ticket_booking

## Overview

CineBook is a React and Express movie-ticket booking platform. Customers browse movies, cinemas, and showtimes, inspect a show’s seat map, hold available seats, confirm a booking, and review their tickets; accounts are handled through registration and login. The backend also exposes admin routes and uses Socket.IO for live seat-state updates. The graph follows the sampled frontend and backend wiring; admin internals and some frontend socket behavior are represented only at the documented or tree-supported subsystem level.

Main entry points: [`backend/server.js`](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/server.js) (Express server), [`backend/routes/bookings.js`](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/bookings.js) (Bookings), [`backend/routes/shows.js`](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/shows.js) (Showtimes), [`backend/routes/auth.js`](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/auth.js) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Customer app"]
  node_app["React app<br/>[App.jsx]"]
  node_api_client["API client<br/>[api.js]"]
  node_socket_client["Socket client<br/>[socket.js]"]
end

subgraph group_api["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_auth_routes["Authentication<br/>[auth.js]"]
  node_auth_middleware["JWT access<br/>[auth.js]"]
  node_jwt["JWT utility<br/>[jwt.js]"]
  node_admin_routes["Admin routes<br/>[admin.js]"]
  node_user_model["User records<br/>[User.js]"]
end

subgraph group_catalog["Movie scheduling"]
  node_movie_routes["Movie catalog<br/>[movies.js]"]
  node_cinema_routes["Cinemas<br/>[cinemas.js]"]
  node_show_routes["Showtimes<br/>[shows.js]"]
  node_movie_model["Movie records<br/>[Movie.js]"]
  node_cinema_model["Cinema records<br/>[Cinema.js]"]
  node_show_model["Show records<br/>[Show.js]"]
end

subgraph group_booking["Seat booking"]
  node_booking_routes["Bookings<br/>[bookings.js]"]
  node_seat_model["Seat inventory<br/>[ShowSeat.js]"]
  node_booking_model["Booking records<br/>[Booking.js]"]
  node_socket_server["Socket.IO<br/>[server.js]"]
end

node_customer(("Customer"))
node_database[("MongoDB")]

node_customer -->|"uses"| node_app
node_app -->|"requests data"| node_api_client
node_api_client -->|"HTTP requests"| node_server
node_server -->|"dispatches"| node_auth_routes
node_server -->|"dispatches"| node_movie_routes
node_server -->|"dispatches"| node_cinema_routes
node_server -->|"dispatches"| node_show_routes
node_server -->|"dispatches"| node_booking_routes
node_server -->|"dispatches"| node_admin_routes
node_auth_routes -->|"reads and writes"| node_user_model
node_auth_routes -->|"signs token"| node_jwt
node_auth_routes -->|"protects profile"| node_auth_middleware
node_movie_routes -->|"reads"| node_movie_model
node_cinema_routes -->|"reads"| node_cinema_model
node_show_routes -->|"reads"| node_show_model
node_show_routes -->|"reads"| node_movie_model
node_show_routes -->|"reads"| node_cinema_model
node_show_routes -->|"reads availability"| node_seat_model
node_booking_routes -->|"checks access"| node_auth_middleware
node_admin_routes -->|"checks access"| node_auth_middleware
node_booking_routes -->|"reads show"| node_show_model
node_booking_routes -->|"holds and books"| node_seat_model
node_booking_routes -->|"creates and reads"| node_booking_model
node_user_model -->|"persists"| node_database
node_movie_model -->|"persists"| node_database
node_cinema_model -->|"persists"| node_database
node_show_model -->|"persists"| node_database
node_seat_model -->|"persists"| node_database
node_booking_model -->|"persists"| node_database
node_booking_routes -->|"emits seat updates"| node_socket_server
node_socket_client -->|"joins show rooms"| node_socket_server
node_app -->|"uses live updates"| node_socket_client

click node_app "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/App.jsx"
click node_api_client "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/api.js"
click node_socket_client "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/socket.js"
click node_server "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/server.js"
click node_auth_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/auth.js"
click node_auth_middleware "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/middleware/auth.js"
click node_jwt "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/utils/jwt.js"
click node_admin_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/admin.js"
click node_movie_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/movies.js"
click node_cinema_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/cinemas.js"
click node_show_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/shows.js"
click node_booking_routes "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/bookings.js"
click node_user_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/User.js"
click node_movie_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Movie.js"
click node_cinema_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Cinema.js"
click node_show_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Show.js"
click node_seat_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/ShowSeat.js"
click node_booking_model "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Booking.js"
click node_socket_server "https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/server.js"

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_app,node_api_client,node_socket_client toneBlue
class node_server,node_auth_routes,node_auth_middleware,node_jwt,node_admin_routes,node_user_model,node_database toneAmber
class node_movie_routes,node_cinema_routes,node_show_routes,node_movie_model,node_cinema_model,node_show_model toneMint
class node_booking_routes,node_seat_model,node_booking_model,node_socket_server toneRose
class node_customer toneIndigo
```

## Components

### Customer app

- [React app](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [API client](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/api.js): `frontend/src/api.js`
- [Socket client](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/frontend/src/socket.js): `frontend/src/socket.js`

### API and access

- [Express server](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/server.js): `backend/server.js`
- [Authentication](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/auth.js): `backend/routes/auth.js`
- [JWT access](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/middleware/auth.js): `backend/middleware/auth.js`
- [JWT utility](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/utils/jwt.js): `backend/utils/jwt.js`
- [Admin routes](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/admin.js): `backend/routes/admin.js`
- [User records](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/User.js): `backend/models/User.js`

### Movie scheduling

- [Movie catalog](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/movies.js): `backend/routes/movies.js`
- [Cinemas](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/cinemas.js): `backend/routes/cinemas.js`
- [Showtimes](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/shows.js): `backend/routes/shows.js`
- [Movie records](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Movie.js): `backend/models/Movie.js`
- [Cinema records](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Cinema.js): `backend/models/Cinema.js`
- [Show records](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Show.js): `backend/models/Show.js`

### Seat booking

- [Bookings](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/routes/bookings.js): `backend/routes/bookings.js`
- [Seat inventory](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/ShowSeat.js): `backend/models/ShowSeat.js`
- [Booking records](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/models/Booking.js): `backend/models/Booking.js`
- [Socket.IO](https://github.com/nijamgouri60/movie_ticket_booking/blob/main/backend/server.js): `backend/server.js`

### Other components

- **Customer**
- **MongoDB**

## Connections

- Customer → React app: uses
- React app → API client: requests data
- API client → Express server: HTTP requests
- Express server → Authentication: dispatches
- Express server → Movie catalog: dispatches
- Express server → Cinemas: dispatches
- Express server → Showtimes: dispatches
- Express server → Bookings: dispatches
- Express server → Admin routes: dispatches
- Authentication → User records: reads and writes
- Authentication → JWT utility: signs token
- Authentication → JWT access: protects profile
- Movie catalog → Movie records: reads
- Cinemas → Cinema records: reads
- Showtimes → Show records: reads
- Showtimes → Movie records: reads
- Showtimes → Cinema records: reads
- Showtimes → Seat inventory: reads availability
- Bookings → JWT access: checks access
- Admin routes → JWT access: checks access
- Bookings → Show records: reads show
- Bookings → Seat inventory: holds and books
- Bookings → Booking records: creates and reads
- User records → MongoDB: persists
- Movie records → MongoDB: persists
- Cinema records → MongoDB: persists
- Show records → MongoDB: persists
- Seat inventory → MongoDB: persists
- Booking records → MongoDB: persists
- Bookings → Socket.IO: emits seat updates
- Socket client → Socket.IO: joins show rooms
- React app → Socket client: uses live updates
