From 4230c538121b443aca77df17160870edd46bb3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 19 Sep 2025 12:40:20 +0200 Subject: [PATCH] feat: enrich travel data with live availabilities --- .../Booking/CreateStep2Controller.php | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/Controller/Booking/CreateStep2Controller.php b/src/Controller/Booking/CreateStep2Controller.php index d186bcc..ec26149 100644 --- a/src/Controller/Booking/CreateStep2Controller.php +++ b/src/Controller/Booking/CreateStep2Controller.php @@ -9,6 +9,7 @@ use App\Form\BookingCreateStep2Type; use App\Form\Model\BookingCreateDto; use App\Form\Model\ParticipantDto; use App\Service\BookingService; +use App\Service\TravelDataService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -27,6 +28,7 @@ class CreateStep2Controller extends AbstractController public function __construct( private readonly BookingService $bookingService, + private readonly TravelDataService $travelDataService, ) { } @@ -40,6 +42,9 @@ class CreateStep2Controller extends AbstractController ->bookingService ->getOrCreateBookingCreateDto($request); + // Enrich with fresh availability data + $this->enrichWithFreshAvailabilities($bookingCreateDto); + // Validate step access $this->validateStepAccess($bookingCreateDto, 2); @@ -89,6 +94,10 @@ class CreateStep2Controller extends AbstractController public function refreshParticipantForm(Request $request): Response { $bookingCreateDto = $this->bookingService->getOrCreateBookingCreateDto($request); + + // Enrich with fresh availability data + $this->enrichWithFreshAvailabilities($bookingCreateDto); + $participantsCount = $this->getParticipantsCount($bookingCreateDto); // Process form data without validation to capture current state @@ -150,4 +159,21 @@ class CreateStep2Controller extends AbstractController $bookingCreateDto->participants[$i] = $participant; } } + + /** + * Enriches travel data with fresh availability information from BusProNet API. + * + * Fetches current availability data and patches the travel object to ensure + * service availability is up-to-date for the booking form. + */ + private function enrichWithFreshAvailabilities(BookingCreateDto $bookingCreateDto): void + { + $dateId = $bookingCreateDto->travel->id; + + $availabilities = $this->travelDataService->getAvailabilityData($dateId); + + if (null !== $availabilities) { + $this->travelDataService->patchAvailabilities($bookingCreateDto->travel, $availabilities); + } + } }