# priya-priyadharshini/airline-reservation-system-fixed architecture

> Architecture diagram of the GitHub repository priya-priyadharshini/airline-reservation-system-fixed, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/priya-priyadharshini/airline-reservation-system-fixed
- Repository: https://github.com/priya-priyadharshini/airline-reservation-system-fixed

## Overview

#### Purpose and Runtime
This is a server-rendered airline reservation system: users register, search flights, select seats, add passengers, pay, and view tickets/bookings; administrators manage flights, users, and bookings. It is a Java Maven application with Spring-style application, controller, service, repository, and template layers. Entry point: `airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java`; build/runtime definition: `airline-reservation-system/pom.xml`.

#### HTTP UI and Entry Boundaries
MVC controllers accept browser requests, place model data for server rendering, and divide routes by role and workflow:
- Authentication: `src/main/java/com/airline/controller/AuthController.java`
- User booking workflow: `src/main/java/com/airline/controller/UserController.java`
- Administrative operations: `src/main/java/com/airline/controller/AdminController.java`

Views are Thymeleaf-style templates under `src/main/resources/templates/`, notably user search/seat/payment pages and admin dashboards. Static styling is served from `src/main/resources/static/css/style.css`.

#### Authentication and Authorization
`AuthController` handles login and registration through request DTOs. `AuthInterceptor` is the central request boundary for authenticated/authorized access, while `AppConfig` likely registers interceptor and MVC behavior:
- `src/main/java/com/airline/config/AuthInterceptor.java`
- `src/main/java/com/airline/config/AppConfig.java`
- `src/main/java/com/airline/entity/User.java`
- `src/main/java/com/airline/entity/Role.java`

The application distinguishes normal users from administrators and routes them into separate controller/template areas.

#### Flight Inventory and Search
Flight availability is modeled through flights and seats, including status fields. User search presents candidate flights, while administrators create/update flight inventory:
- `src/main/java/com/airline/service/FlightService.java`
- `src/main/java/com/airline/entity/Flight.java`
- `src/main/java/com/airline/entity/Seat.java`
- `src/main/java/com/airline/repository/FlightRepository.java`

The key control boundary is service-layer enforcement between controllers and persistence; repositories encapsulate database access.

#### Booking Lifecycle
`BookingService` is the primary transactional domain coordinator. The expected lifecycle is flight selection → seat selection → passenger capture → booking/payment → ticket display/history. Its persisted aggregate spans booking, passenger, payment, ticket, and seat state:
- `src/main/java/com/airline/service/BookingService.java`
- `src/main/java/com/airline/entity/Booking.java`
- `src/main/java/com/airline/entity/Passenger.java`
- `src/main/java/com/airline/entity/Ticket.java`

Status enums (`BookingStatus`, `PaymentStatus`, `FlightStatus`) define lifecycle state boundaries.

#### Persistence and Initialization
The data layer uses entity-specific repositories, backed by a local H2-style database artifact at `data/airline_db.mv.db`. Database structure is also represented in `schema.sql`; startup/sample-data initialization is centralized in `DataLoader`:
- `src/main/java/com/airline/config/DataLoader.java`
- `airline-reservation-system/schema.sql`
- `airline-reservation-system/data/airline_db.mv.db`
- `src/main/resources/application.properties`

There are no visible integrations with payment gateways, airline APIs, message brokers, or external identity providers; payment is modeled internally.

#### DTO and Presentation Flow
Request-specific DTOs isolate browser form payloads from JPA/domain entities, especially for login, registration, passenger creation, and payment:
- `src/main/java/com/airline/dto/LoginDto.java`
- `src/main/java/com/airline/dto/PassengerDto.java`
- `src/main/java/com/airline/dto/PaymentDto.java`

Templates map directly to major workflow states: `templates/user/search.html`, `templates/user/seats.html`, `templates/user/payment.html`, and `templates/user/ticket.html`. Booking/ticket codes are likely generated through `src/main/java/com/airline/util/CodeGenerator.java`.

Main entry points: [`airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java`](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java) (Application), [`airline-reservation-system/data/airline_db.mv.db`](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/data/airline_db.mv.db) (H2 database), [`airline-reservation-system/pom.xml`](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/pom.xml) (Maven build)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime"]
  node_app{{"Application<br/>Spring Boot entry point"}}
  node_build["Maven build<br/>build definition<br/>[pom.xml]"]
end

subgraph group_web["MVC UI"]
  node_mvc_config["MVC configuration<br/>interceptor registration"]
  node_auth_interceptor["Auth interceptor<br/>access boundary"]
  node_auth_controller["Authentication<br/>MVC controller"]
  node_user_controller["User booking flow<br/>MVC controller"]
  node_admin_controller["Administration<br/>MVC controller"]
  node_request_dtos["Form DTOs<br/>request models"]
end

subgraph group_domain["Domain Services"]
  node_flight_service["Flight service<br/>inventory service"]
  node_booking_service["Booking service<br/>transaction coordinator"]
  node_code_generator["Code generator<br/>domain utility"]
end

subgraph group_persistence["Persistence"]
  node_user_role["Users and roles<br/>identity entities"]
  node_flight_seat["Flights and seats<br/>inventory entities"]
  node_booking_aggregate["Booking aggregate<br/>booking entities"]
  node_repositories["Repositories<br/>JPA data access"]
  node_database[("H2 database<br/>local database<br/>[airline_db.mv.db]")]
  node_data_loader["Data loader<br/>startup initialization"]
end

subgraph group_presentation["Server Views"]
  node_templates["Booking templates<br/>Thymeleaf views"]
  node_styles["Site styling<br/>static asset"]
end

node_build -->|"builds and runs"| node_app
node_app -->|"initializes"| node_mvc_config
node_mvc_config -->|"registers"| node_auth_interceptor
node_auth_interceptor -->|"guards requests"| node_auth_controller
node_auth_interceptor -->|"guards requests"| node_user_controller
node_auth_interceptor -->|"guards requests"| node_admin_controller
node_auth_controller -->|"binds forms"| node_request_dtos
node_auth_controller -->|"authenticates users"| node_user_role
node_user_controller -->|"binds forms"| node_request_dtos
node_user_controller -->|"searches flights"| node_flight_service
node_user_controller -->|"creates and pays bookings"| node_booking_service
node_admin_controller -->|"manages inventory"| node_flight_service
node_admin_controller -->|"manages bookings"| node_booking_service
node_flight_service -->|"persists inventory"| node_repositories
node_booking_service -->|"persists lifecycle"| node_repositories
node_booking_service -->|"generates codes"| node_code_generator
node_repositories -->|"maps"| node_user_role
node_repositories -->|"maps"| node_flight_seat
node_repositories -->|"maps"| node_booking_aggregate
node_repositories -->|"reads and writes"| node_database
node_data_loader -->|"seeds at startup"| node_database
node_auth_controller -->|"renders"| node_templates
node_user_controller -->|"renders workflow"| node_templates
node_admin_controller -->|"renders dashboards"| node_templates
node_templates -->|"uses"| node_styles

click node_app "https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java"
click node_build "https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/pom.xml"
click node_database "https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/data/airline_db.mv.db"

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_build toneBlue
class node_mvc_config,node_auth_interceptor,node_auth_controller,node_user_controller,node_admin_controller,node_request_dtos toneAmber
class node_flight_service,node_booking_service,node_code_generator toneMint
class node_user_role,node_flight_seat,node_booking_aggregate,node_repositories,node_database,node_data_loader toneRose
class node_templates,node_styles toneIndigo
```

## Components

### Runtime

- [Application](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java): Spring Boot entry point · `airline-reservation-system/src/main/java/com/airline/AirlineReservationSystemApplication.java`
- [Maven build](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/pom.xml): build definition · `airline-reservation-system/pom.xml`

### MVC UI

- **MVC configuration**: interceptor registration
- **Auth interceptor**: access boundary · Enforces authenticated and role-based routes.
- **Authentication**: MVC controller
- **User booking flow**: MVC controller
- **Administration**: MVC controller
- **Form DTOs**: request models · Login, passenger, and payment form payloads.

### Domain Services

- **Flight service**: inventory service · Searches availability and manages flight inventory.
- **Booking service**: transaction coordinator · Coordinates seats, passengers, booking, payment, and tickets.
- **Code generator**: domain utility · Generates booking and ticket codes.

### Persistence

- **Users and roles**: identity entities
- **Flights and seats**: inventory entities · Availability and flight status state.
- **Booking aggregate**: booking entities · Booking, passenger, payment, ticket, and lifecycle status.
- **Repositories**: JPA data access · Entity-specific persistence boundary.
- [H2 database](https://github.com/priya-priyadharshini/airline-reservation-system-fixed/blob/main/airline-reservation-system/data/airline_db.mv.db): local database · `airline-reservation-system/data/airline_db.mv.db`
- **Data loader**: startup initialization

### Server Views

- **Booking templates**: Thymeleaf views · Search, seats, payment, ticket, and admin pages.
- **Site styling**: static asset

## Connections

- Maven build → Application: builds and runs
- Application → MVC configuration: initializes
- MVC configuration → Auth interceptor: registers
- Auth interceptor → Authentication: guards requests
- Auth interceptor → User booking flow: guards requests
- Auth interceptor → Administration: guards requests
- Authentication → Form DTOs: binds forms
- Authentication → Users and roles: authenticates users
- User booking flow → Form DTOs: binds forms
- User booking flow → Flight service: searches flights
- User booking flow → Booking service: creates and pays bookings
- Administration → Flight service: manages inventory
- Administration → Booking service: manages bookings
- Flight service → Repositories: persists inventory
- Booking service → Repositories: persists lifecycle
- Booking service → Code generator: generates codes
- Repositories → Users and roles: maps
- Repositories → Flights and seats: maps
- Repositories → Booking aggregate: maps
- Repositories → H2 database: reads and writes
- Data loader → H2 database: seeds at startup
- Authentication → Booking templates: renders
- User booking flow → Booking templates: renders workflow
- Administration → Booking templates: renders dashboards
- Booking templates → Site styling: uses
