# spark1805/railway_reservation_system architecture

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

## Overview

This is a Spring Boot railway reservation backend. Users search trains and seat availability, then submit passenger and schedule details to create a booking; they can also retrieve booking history or cancel a ticket. Search and booking are distinct stages, with service logic using JPA repositories for persistence. README documents JWT authentication, but the supplied tree and source excerpts do not show its implementation or endpoint wiring; meal and fare services are present, but their callers are not shown.

Main entry points: [`src/main/java/com/prnv/jfsd/trs/service/BookingService.java`](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/BookingService.java) (Booking Logic), [`src/main/java/com/prnv/jfsd/trs/service/TrainService.java`](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/TrainService.java) (Train Search), [`src/main/java/com/prnv/jfsd/trs/repository/TicketRepository.java`](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/TicketRepository.java) (Ticket Repository), [`src/main/java/com/prnv/jfsd/trs/repository/ScheduleRepository.java`](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/ScheduleRepository.java) (Schedule Repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_train_controller["Train API"]
  node_booking_controller["Booking API"]
  node_ticket_controller["Ticket API"]
  node_user_controller["User API"]
end

subgraph group_domain["Reservation Services"]
  node_train_service["Train Search<br/>[TrainService.java]"]
  node_availability_service["Seat Availability"]
  node_booking_service["Booking Logic"]
  node_seat_allocation["Seat Allocation"]
end

subgraph group_data["Persistence Access"]
  node_route_repo["Route Repository"]
  node_schedule_repo["Schedule Repository"]
  node_coach_repo["Coach Repository"]
  node_ticket_repo["Ticket Repository"]
  node_passenger_repo["Passenger Repository"]
  node_user_repo["User Repository"]
end

subgraph group_extras["Ancillary Services"]
  node_fare_service["Fare Calculation<br/>[FareService.java]"]
  node_meal_service["Meal Pricing<br/>[MealService.java]"]
end

node_user(("User"))
node_mysql[("MySQL Database")]

node_user -->|"searches trains"| node_train_controller
node_train_controller -->|"calls search"| node_train_service
node_train_service -->|"finds routes"| node_route_repo
node_train_service -->|"loads schedules"| node_schedule_repo
node_train_service -->|"gets availability"| node_availability_service
node_availability_service -->|"loads coaches"| node_coach_repo
node_user -->|"submits booking"| node_booking_controller
node_booking_controller -->|"creates booking"| node_booking_service
node_booking_service -->|"loads user"| node_user_repo
node_booking_service -->|"loads schedule"| node_schedule_repo
node_booking_service -->|"counts and saves tickets"| node_ticket_repo
node_booking_service -->|"saves passengers"| node_passenger_repo
node_user -->|"cancels ticket"| node_ticket_controller
node_ticket_controller -->|"finds and updates ticket"| node_ticket_repo
node_user -->|"requests history"| node_user_controller
node_user_controller -->|"loads bookings"| node_ticket_repo
node_route_repo -->|"queries routes"| node_mysql
node_schedule_repo -->|"reads schedules"| node_mysql
node_coach_repo -->|"reads coaches"| node_mysql
node_ticket_repo -->|"reads and writes tickets"| node_mysql
node_passenger_repo -->|"writes passengers"| node_mysql
node_user_repo -->|"reads users"| node_mysql

click node_train_controller "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/TrainController.java"
click node_booking_controller "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/BookingController.java"
click node_ticket_controller "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/TicketController.java"
click node_user_controller "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/UserController.java"
click node_train_service "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/TrainService.java"
click node_availability_service "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/SeatAvailabilityService.java"
click node_booking_service "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/BookingService.java"
click node_seat_allocation "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/SeatAllocationService.java"
click node_fare_service "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/FareService.java"
click node_meal_service "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/MealService.java"
click node_route_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/RouteRepository.java"
click node_schedule_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/ScheduleRepository.java"
click node_coach_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/CoachRepository.java"
click node_ticket_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/TicketRepository.java"
click node_passenger_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/PassengerRepository.java"
click node_user_repo "https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/UserRepository.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_train_controller,node_booking_controller,node_ticket_controller,node_user_controller,node_user toneBlue
class node_train_service,node_availability_service,node_booking_service,node_seat_allocation,node_mysql toneAmber
class node_route_repo,node_schedule_repo,node_coach_repo,node_ticket_repo,node_passenger_repo,node_user_repo toneMint
class node_fare_service,node_meal_service toneRose
```

## Components

### REST API

- [Train API](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/TrainController.java): `src/main/java/com/prnv/jfsd/trs/controller/TrainController.java`
- [Booking API](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/BookingController.java): `src/main/java/com/prnv/jfsd/trs/controller/BookingController.java`
- [Ticket API](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/TicketController.java): `src/main/java/com/prnv/jfsd/trs/controller/TicketController.java`
- [User API](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/controller/UserController.java): `src/main/java/com/prnv/jfsd/trs/controller/UserController.java`

### Reservation Services

- [Train Search](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/TrainService.java): `src/main/java/com/prnv/jfsd/trs/service/TrainService.java`
- [Seat Availability](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/SeatAvailabilityService.java): `src/main/java/com/prnv/jfsd/trs/service/SeatAvailabilityService.java`
- [Booking Logic](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/BookingService.java): `src/main/java/com/prnv/jfsd/trs/service/BookingService.java`
- [Seat Allocation](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/SeatAllocationService.java): `src/main/java/com/prnv/jfsd/trs/service/SeatAllocationService.java`

### Persistence Access

- [Route Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/RouteRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/RouteRepository.java`
- [Schedule Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/ScheduleRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/ScheduleRepository.java`
- [Coach Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/CoachRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/CoachRepository.java`
- [Ticket Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/TicketRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/TicketRepository.java`
- [Passenger Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/PassengerRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/PassengerRepository.java`
- [User Repository](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/repository/UserRepository.java): `src/main/java/com/prnv/jfsd/trs/repository/UserRepository.java`

### Ancillary Services

- [Fare Calculation](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/FareService.java): `src/main/java/com/prnv/jfsd/trs/service/FareService.java`
- [Meal Pricing](https://github.com/spark1805/railway_reservation_system/blob/main/src/main/java/com/prnv/jfsd/trs/service/MealService.java): `src/main/java/com/prnv/jfsd/trs/service/MealService.java`

### Other components

- **User**
- **MySQL Database**

## Connections

- User → Train API: searches trains
- Train API → Train Search: calls search
- Train Search → Route Repository: finds routes
- Train Search → Schedule Repository: loads schedules
- Train Search → Seat Availability: gets availability
- Seat Availability → Coach Repository: loads coaches
- User → Booking API: submits booking
- Booking API → Booking Logic: creates booking
- Booking Logic → User Repository: loads user
- Booking Logic → Schedule Repository: loads schedule
- Booking Logic → Ticket Repository: counts and saves tickets
- Booking Logic → Passenger Repository: saves passengers
- User → Ticket API: cancels ticket
- Ticket API → Ticket Repository: finds and updates ticket
- User → User API: requests history
- User API → Ticket Repository: loads bookings
- Route Repository → MySQL Database: queries routes
- Schedule Repository → MySQL Database: reads schedules
- Coach Repository → MySQL Database: reads coaches
- Ticket Repository → MySQL Database: reads and writes tickets
- Passenger Repository → MySQL Database: writes passengers
- User Repository → MySQL Database: reads users
