feat: centralize create/edit flow contexts, extract edit submit service
This commit is contained in:
1 parent
f903f17ebd
commit
69705052b3
28 files changed
+1342
-423
No files matched your search
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use App\Form\Model\BookingCreateContext;
|
||||
use App\Form\Model\BookingDto;
|
||||
|
||||
/**
|
||||
* Prepares the shared view model for booking create.
|
||||
*/
|
||||
class BookingCreateContextFactory
|
||||
{
|
||||
public function __construct(
|
||||
private readonly BookingRoomSelectionService $roomSelectionService,
|
||||
private readonly ParticipantCardDataService $participantCardDataService,
|
||||
private readonly BookingSummaryDataService $summaryDataService,
|
||||
private readonly BookingPriceCalculatorService $priceCalculator,
|
||||
) {
|
||||
}
|
||||
|
||||
public function create(
|
||||
BookingDto $bookingDto,
|
||||
string $pricingMode = RoomPricingCalculator::PRICING_MODE_ASSIGNMENT,
|
||||
): BookingCreateContext
|
||||
{
|
||||
$baseContext = $this->buildBaseContext($bookingDto, $pricingMode);
|
||||
|
||||
return new BookingCreateContext(
|
||||
bookingDto: $bookingDto,
|
||||
summaryData: $baseContext['summaryData'],
|
||||
groupedRooms: $baseContext['groupedRooms'],
|
||||
);
|
||||
}
|
||||
|
||||
public function createWithParticipantCards(BookingDto $bookingDto, bool $isSubmitted): BookingCreateContext
|
||||
{
|
||||
$baseContext = $this->buildBaseContext($bookingDto, RoomPricingCalculator::PRICING_MODE_SELECTION);
|
||||
|
||||
return new BookingCreateContext(
|
||||
bookingDto: $bookingDto,
|
||||
summaryData: $baseContext['summaryData'],
|
||||
groupedRooms: $baseContext['groupedRooms'],
|
||||
cardsData: $this->participantCardDataService->getAllCardsDataWithValidation($bookingDto),
|
||||
isSubmitted: $isSubmitted,
|
||||
);
|
||||
}
|
||||
|
||||
public function createWithParticipantPrices(BookingDto $bookingDto): BookingCreateContext
|
||||
{
|
||||
$baseContext = $this->buildBaseContext($bookingDto, RoomPricingCalculator::PRICING_MODE_ASSIGNMENT);
|
||||
|
||||
return new BookingCreateContext(
|
||||
bookingDto: $bookingDto,
|
||||
summaryData: $baseContext['summaryData'],
|
||||
groupedRooms: $baseContext['groupedRooms'],
|
||||
participantPrices: $this->priceCalculator->calculateAllParticipantIndividualPrices($bookingDto),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{summaryData: \App\Form\Model\BookingSummaryDto, groupedRooms: array{by_pax: array<int, \App\BusProNet\Model\Room>, by_room: array<int, \App\BusProNet\Model\Room>}}
|
||||
*/
|
||||
private function buildBaseContext(BookingDto $bookingDto, string $pricingMode): array
|
||||
{
|
||||
return [
|
||||
'summaryData' => $this->summaryDataService->getSummaryData($bookingDto, $pricingMode),
|
||||
'groupedRooms' => $this->roomSelectionService->groupRoomsBySelectionType(
|
||||
$bookingDto->travel->getAvailableRooms()
|
||||
),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user