# ansbeno/cinema architecture

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

- Interactive diagram: https://gitdiagram.com/ansbeno/cinema
- Repository: https://github.com/ansbeno/cinema

## Overview

Films Cinema Platform combines an Angular customer app with a Spring Boot customer API and Thymeleaf admin area. The main customer journey is browsing films and upcoming screenings, selecting a screening, checking availability, booking tickets, then reviewing or canceling bookings; signed-in customers can also rate films. Admins manage screenings, users, and cinema data and review dashboard metrics. The graph preserves these documented capabilities, but sampled source supports detailed service-to-repository links only for selected backend workflows; unsampled connections are omitted.

Main entry points: [`Films_Angular/src/app/app.routes.ts`](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/app.routes.ts) (App routes), [`Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingService.java`](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingService.java) (Booking rules), [`Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingService.java`](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingService.java) (Film ratings), [`Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardService.java`](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardService.java) (Dashboard metrics)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer app"]
  node_angular_routes["App routes<br/>[app.routes.ts]"]
  node_home_page["Home and upcoming<br/>[home.component.ts]"]
  node_films_page["Film browsing<br/>[films.component.ts]"]
  node_film_detail["Film details"]
  node_login_page["Login and signup<br/>[login.component.ts]"]
  node_bookings_page["My bookings"]
end

subgraph group_identity["Identity"]
  node_auth_service["Auth client<br/>[auth.service.ts]"]
  node_api_auth["Auth API"]
  node_auth_logic["Authentication"]
  node_user_store[("User records")]
end

subgraph group_cinema["Cinema catalog"]
  node_film_service["Film client<br/>[film.service.ts]"]
  node_screening_service["Screening client"]
  node_api_films["Film API"]
  node_film_logic["Film catalog<br/>[FilmService.java]"]
  node_film_store[("Film records")]
  node_screening_api["Screening API"]
  node_screening_logic["Screening queries"]
  node_screening_store[("Screening records")]
end

subgraph group_transactions["Bookings and ratings"]
  node_booking_service["Booking client<br/>[booking.service.ts]"]
  node_booking_api["Booking API"]
  node_booking_logic["Booking rules"]
  node_booking_store[("Booking records")]
  node_rating_api["Rating API"]
  node_rating_logic["Film ratings"]
  node_rating_store[("Rating records")]
end

subgraph group_admin["Admin operations"]
  node_dashboard["Dashboard"]
  node_dashboard_logic["Dashboard metrics"]
  node_screening_admin["Screening management"]
  node_film_admin["Film management"]
  node_user_admin["User management"]
end

node_customers(("Customers"))
node_admin(("Administrators"))

node_customers -->|"navigate"| node_angular_routes
node_angular_routes -->|"loads"| node_home_page
node_angular_routes -->|"loads"| node_films_page
node_angular_routes -->|"loads"| node_film_detail
node_angular_routes -->|"loads"| node_login_page
node_angular_routes -->|"loads"| node_bookings_page
node_login_page -->|"requests auth"| node_auth_service
node_films_page -->|"requests films"| node_film_service
node_film_detail -->|"requests details"| node_film_service
node_home_page -->|"requests screenings"| node_screening_service
node_film_detail -->|"requests screenings"| node_screening_service
node_bookings_page -->|"manages bookings"| node_booking_service
node_auth_service -->|"calls API"| node_api_auth
node_film_service -->|"calls API"| node_api_films
node_screening_service -->|"calls API"| node_screening_api
node_booking_service -->|"calls API"| node_booking_api
node_api_auth -->|"delegates"| node_auth_logic
node_auth_logic -->|"reads and writes"| node_user_store
node_api_films -->|"delegates"| node_film_logic
node_film_logic -->|"reads and writes"| node_film_store
node_screening_api -->|"delegates"| node_screening_logic
node_screening_logic -->|"queries"| node_screening_store
node_booking_api -->|"delegates"| node_booking_logic
node_booking_logic -->|"reads and writes"| node_booking_store
node_booking_logic -->|"checks screening"| node_screening_store
node_booking_logic -->|"finds customer"| node_user_store
node_admin -->|"uses"| node_dashboard
node_dashboard -->|"delegates"| node_dashboard_logic
node_dashboard_logic -->|"counts films"| node_film_store
node_dashboard_logic -->|"counts screenings"| node_screening_store
node_dashboard_logic -->|"counts users"| node_user_store
node_admin -->|"manages"| node_screening_admin
node_admin -->|"manages"| node_film_admin
node_admin -->|"manages"| node_user_admin
node_rating_api -->|"delegates"| node_rating_logic
node_rating_logic -->|"reads and writes"| node_rating_store
node_rating_logic -->|"finds film"| node_film_store
node_rating_logic -->|"finds customer"| node_user_store

click node_angular_routes "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/app.routes.ts"
click node_home_page "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/home/home.component.ts"
click node_films_page "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/film/films/films.component.ts"
click node_film_detail "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/film/film-details/film-details.component.ts"
click node_login_page "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/auth/login/login.component.ts"
click node_bookings_page "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/booking/my-bookings/my-bookings.component.ts"
click node_auth_service "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/auth.service.ts"
click node_film_service "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/film.service.ts"
click node_screening_service "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/screening.service.ts"
click node_booking_service "https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/booking.service.ts"
click node_api_auth "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/auth/ApiAuthController.java"
click node_auth_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/auth/AuthenticationService.java"
click node_user_store "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserRepository.java"
click node_api_films "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/ApiFilmController.java"
click node_film_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmService.java"
click node_film_store "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmRepository.java"
click node_screening_api "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ApiScreeningController.java"
click node_screening_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningService.java"
click node_screening_store "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningRepository.java"
click node_booking_api "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/ApiBookingController.java"
click node_booking_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingService.java"
click node_booking_store "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingRepository.java"
click node_rating_api "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/ApiFilmRatingController.java"
click node_rating_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingService.java"
click node_rating_store "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingRepository.java"
click node_dashboard "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardController.java"
click node_dashboard_logic "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardService.java"
click node_screening_admin "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningController.java"
click node_film_admin "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmController.java"
click node_user_admin "https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserController.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_angular_routes,node_home_page,node_films_page,node_film_detail,node_login_page,node_bookings_page toneBlue
class node_auth_service,node_api_auth,node_auth_logic,node_user_store toneAmber
class node_film_service,node_screening_service,node_api_films,node_film_logic,node_film_store,node_screening_api,node_screening_logic,node_screening_store toneMint
class node_booking_service,node_booking_api,node_booking_logic,node_booking_store,node_rating_api,node_rating_logic,node_rating_store toneRose
class node_dashboard,node_dashboard_logic,node_screening_admin,node_film_admin,node_user_admin,node_customers,node_admin toneIndigo
```

## Components

### Customer app

- [App routes](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/app.routes.ts): `Films_Angular/src/app/app.routes.ts`
- [Home and upcoming](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/home/home.component.ts): `Films_Angular/src/app/pages/home/home.component.ts`
- [Film browsing](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/film/films/films.component.ts): `Films_Angular/src/app/pages/film/films/films.component.ts`
- [Film details](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/film/film-details/film-details.component.ts): `Films_Angular/src/app/pages/film/film-details/film-details.component.ts`
- [Login and signup](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/auth/login/login.component.ts): `Films_Angular/src/app/pages/auth/login/login.component.ts`
- [My bookings](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/pages/booking/my-bookings/my-bookings.component.ts): `Films_Angular/src/app/pages/booking/my-bookings/my-bookings.component.ts`

### Identity

- [Auth client](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/auth.service.ts): `Films_Angular/src/app/services/auth.service.ts`
- [Auth API](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/auth/ApiAuthController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/auth/ApiAuthController.java`
- [Authentication](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/auth/AuthenticationService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/auth/AuthenticationService.java`
- [User records](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserRepository.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserRepository.java`

### Cinema catalog

- [Film client](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/film.service.ts): `Films_Angular/src/app/services/film.service.ts`
- [Screening client](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/screening.service.ts): `Films_Angular/src/app/services/screening.service.ts`
- [Film API](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/ApiFilmController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/film/ApiFilmController.java`
- [Film catalog](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmService.java`
- [Film records](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmRepository.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmRepository.java`
- [Screening API](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ApiScreeningController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ApiScreeningController.java`
- [Screening queries](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningService.java`
- [Screening records](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningRepository.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningRepository.java`

### Bookings and ratings

- [Booking client](https://github.com/ansbeno/cinema/blob/main/Films_Angular/src/app/services/booking.service.ts): `Films_Angular/src/app/services/booking.service.ts`
- [Booking API](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/ApiBookingController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/booking/ApiBookingController.java`
- [Booking rules](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingService.java`
- [Booking records](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingRepository.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/booking/BookingRepository.java`
- [Rating API](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/ApiFilmRatingController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/rating/ApiFilmRatingController.java`
- [Film ratings](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingService.java`
- [Rating records](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingRepository.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/rating/FilmRatingRepository.java`

### Admin operations

- [Dashboard](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardController.java`
- [Dashboard metrics](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardService.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/dashboard/DashboardService.java`
- [Screening management](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/screening/ScreeningController.java`
- [Film management](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/film/FilmController.java`
- [User management](https://github.com/ansbeno/cinema/blob/main/Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserController.java): `Films_SpringBoot/src/main/java/com/ansbeno/films/user/UserController.java`

### Other components

- **Customers**
- **Administrators**

## Connections

- Customers → App routes: navigate
- App routes → Home and upcoming: loads
- App routes → Film browsing: loads
- App routes → Film details: loads
- App routes → Login and signup: loads
- App routes → My bookings: loads
- Login and signup → Auth client: requests auth
- Film browsing → Film client: requests films
- Film details → Film client: requests details
- Home and upcoming → Screening client: requests screenings
- Film details → Screening client: requests screenings
- My bookings → Booking client: manages bookings
- Auth client → Auth API: calls API
- Film client → Film API: calls API
- Screening client → Screening API: calls API
- Booking client → Booking API: calls API
- Auth API → Authentication: delegates
- Authentication → User records: reads and writes
- Film API → Film catalog: delegates
- Film catalog → Film records: reads and writes
- Screening API → Screening queries: delegates
- Screening queries → Screening records: queries
- Booking API → Booking rules: delegates
- Booking rules → Booking records: reads and writes
- Booking rules → Screening records: checks screening
- Booking rules → User records: finds customer
- Administrators → Dashboard: uses
- Dashboard → Dashboard metrics: delegates
- Dashboard metrics → Film records: counts films
- Dashboard metrics → Screening records: counts screenings
- Dashboard metrics → User records: counts users
- Administrators → Screening management: manages
- Administrators → Film management: manages
- Administrators → User management: manages
- Rating API → Film ratings: delegates
- Film ratings → Rating records: reads and writes
- Film ratings → Film records: finds film
- Film ratings → User records: finds customer
