How mhfcodes/flight-booking-spring-boot works
Purpose and Runtime
A Spring Boot REST backend for flight discovery, booking management, booking companions, and user profiles. It serves a static index page and exposes /flightBooking/... APIs. The application entry point is src/main/java/com/hossein/FlightBooking/FlightBookingApplication.java; static delivery begins at src/main/resources/static/index.html.
Core runtime stack is Spring Boot, Spring Data JPA/Hibernate persistence, Spring Security with JWT authentication, and ModelMapper. The README identifies a deployed Heroku instance; persistence database type is not established by the supplied files.
HTTP/API Boundary
Controllers are the inbound API layer, organized by business capability:
• Flights: src/main/java/com/hossein/FlightBooking/controllers/flights/FlightsController.java
• Bookings and companion operations: src/main/java/com/hossein/FlightBooking/controllers/bookings/BookingsController.java
• Authentication: src/main/java/com/hossein/FlightBooking/controllers/infrastructure/login/LoginController.java, src/main/java/com/hossein/FlightBooking/controllers/infrastructure/signup/SignupController.java
• Profiles and landing page: src/main/java/com/hossein/FlightBooking/controllers/userDetails/UserDetailsController.java, src/main/java/com/hossein/FlightBooking/controllers/home/HomeController.java
Requests and responses use DTOs plus response-oriented view models rather than exposing entities directly.
Identity, Authentication, and Authorization
Signup persists users; login authenticates credentials and returns a JWT. Subsequent requests pass through the JWT filter and Spring Security configuration before reaching protected controllers. Roles distinguish admin-only flight administration and cross-user user/booking visibility from normal user operations.
• src/main/java/com/hossein/FlightBooking/security/config/SecurityConfiguration.java
• src/main/java/com/hossein/FlightBooking/security/jwt/JwtRequestFilter.java
• src/main/java/com/hossein/FlightBooking/security/jwt/JwtTokenUtil.java
• src/main/java/com/hossein/FlightBooking/services/impl/infrastructure/FlightBookingUserDetailsService.java
Flight Catalog Stage
Flight APIs list/filter available flights, load individual flights, and permit admins to save or delete catalog records. The controller delegates business handling to the flights service, which accesses both standard and custom repository query paths.
• src/main/java/com/hossein/FlightBooking/controllers/flights/FlightsController.java
• src/main/java/com/hossein/FlightBooking/services/impl/flights/FlightsService.java
• src/main/java/com/hossein/FlightBooking/dao/repositories/impl/flights/FlightsCustomRepoImpl.java
• src/main/java/com/hossein/FlightBooking/models/flights/Flights.java
Booking and Companion Stage
Bookings are user-owned records associated with flights; users operate on their own bookings while admins can access all bookings. Companions are nested beneath a booking and support individual or bulk save/delete operations. Ownership and role checks are an important service/repository boundary for these operations.
• src/main/java/com/hossein/FlightBooking/controllers/bookings/BookingsController.java
• src/main/java/com/hossein/FlightBooking/services/impl/bookings/BookingsService.java
• src/main/java/com/hossein/FlightBooking/dao/repositories/impl/bookings/BookingsCustomRepoImpl.java
• src/main/java/com/hossein/FlightBooking/dao/repositories/impl/companions/CompanionsCustomRepoImpl.java
User and Profile Stage
Infrastructure user records and role records support authentication. A separate user-details domain stores editable personal information; users load/save their own data, while admins can retrieve a grid of all user details.
• src/main/java/com/hossein/FlightBooking/services/impl/infrastructure/UserService.java
• src/main/java/com/hossein/FlightBooking/services/impl/userDetails/UserDetailsService.java
• src/main/java/com/hossein/FlightBooking/models/infrastructure/UserModel.java
• src/main/java/com/hossein/FlightBooking/models/userDetails/UserDetailsModel.java
Persistence, Mapping, and Errors
JPA entities flow through repositories and services. Custom repositories likely implement filtered grid/list retrieval; GenericRepository provides shared repository configuration. ModelMapper adapters enforce DTO-to-entity and entity-to-view-model boundaries. Controller advice translates application failures into API error responses.
• src/main/java/com/hossein/FlightBooking/dao/config/GenericRepository.java
• src/main/java/com/hossein/FlightBooking/modelMapper/config/ModelMapperBean.java
• src/main/java/com/hossein/FlightBooking/modelMapper/maps/bookings/DBookingsMapper.java
• src/main/java/com/hossein/FlightBooking/exceptions/CustomControllerAdvice.java
Main entry points: Flights.java JPA domain entities · BookingsService.java Bookings service · FlightBookingApplication.java Spring Boot app · JwtRequestFilter.java JWT request filter
Components 21
Web/API
- Static landing page
src/main/resources/static/index.html - Home controller
src/main/java/com/hossein/FlightBooking/controllers/home/HomeController.java - Flights controller · Flight discovery and admin catalog APIs.
src/main/java/com/hossein/FlightBooking/controllers/flights/FlightsController.java - Bookings controller · Booking and nested companion APIs.
src/main/java/com/hossein/FlightBooking/controllers/bookings/BookingsController.java - Login & signup controllers · Credential authentication and user registration endpoints.
src/main/java/com/hossein/FlightBooking/controllers/infrastructure/login/LoginController.java - User details controller
src/main/java/com/hossein/FlightBooking/controllers/userDetails/UserDetailsController.java - Controller advice · Converts application failures to API errors.
src/main/java/com/hossein/FlightBooking/exceptions/CustomControllerAdvice.java
Security
- Security configuration · Defines protected routes and role authorization.
src/main/java/com/hossein/FlightBooking/security/config/SecurityConfiguration.java - JWT request filter
src/main/java/com/hossein/FlightBooking/security/jwt/JwtRequestFilter.java - JWT token utility
src/main/java/com/hossein/FlightBooking/security/jwt/JwtTokenUtil.java - User details auth service · Loads authenticated users and roles.
src/main/java/com/hossein/FlightBooking/services/impl/infrastructure/FlightBookingUserDetailsService.java
Domain services
- Flights service
src/main/java/com/hossein/FlightBooking/services/impl/flights/FlightsService.java - Bookings service · Enforces booking ownership and companion operations.
src/main/java/com/hossein/FlightBooking/services/impl/bookings/BookingsService.java - User service
src/main/java/com/hossein/FlightBooking/services/impl/infrastructure/UserService.java - User details service · Own-profile updates and admin user-details grid.
src/main/java/com/hossein/FlightBooking/services/impl/userDetails/UserDetailsService.java - DTO/view mapping · Maps API DTOs, entities, and response views.
src/main/java/com/hossein/FlightBooking/modelMapper/config/ModelMapperBean.java
Persistence
- Flights custom repository · Filtered flight retrieval and catalog persistence.
src/main/java/com/hossein/FlightBooking/dao/repositories/impl/flights/FlightsCustomRepoImpl.java - Bookings custom repository · Ownership-aware booking queries.
src/main/java/com/hossein/FlightBooking/dao/repositories/impl/bookings/BookingsCustomRepoImpl.java - Companions custom repository · Nested companion persistence operations.
src/main/java/com/hossein/FlightBooking/dao/repositories/impl/companions/CompanionsCustomRepoImpl.java - JPA domain entities · Flights, bookings, users, roles, and user details.
src/main/java/com/hossein/FlightBooking/models/flights/Flights.java
Other components
- Spring Boot app · Bootstraps the REST backend.
src/main/java/com/hossein/FlightBooking/FlightBookingApplication.java
Connections 22
- Spring Boot app → Static landing page: serves
- Spring Boot app → Security configuration: configures
- Spring Boot app → Controller advice: uses
- Security configuration → JWT request filter: installs
- JWT request filter → JWT token utility: validates token with
- JWT request filter → User details auth service: loads principal via
- Login & signup controllers → JWT token utility: issues JWT
- Login & signup controllers → User service: registers/authenticates
- Flights controller → Flights service: delegates
- Bookings controller → Bookings service: delegates
- User details controller → User details service: delegates
- Flights service → Flights custom repository: queries and writes
- Bookings service → Bookings custom repository: queries and writes
- Bookings service → Companions custom repository: manages companions
- User service → JPA domain entities: persists users and roles
- User details service → JPA domain entities: persists profile details
- Flights custom repository → JPA domain entities: persists flights
- Bookings custom repository → JPA domain entities: persists bookings
- Companions custom repository → JPA domain entities: persists companions
- Flights service → DTO/view mapping: maps DTOs/views
- Bookings service → DTO/view mapping: maps DTOs/views
- User details service → DTO/view mapping: maps DTOs/views