*/ final readonly class GetTunnelOrderConfirmedQuery implements Query { public function __construct( private MapUrlService $mapUrlService, ) { } /** * @param \App\Queries\Orders\GetTunnelOrderConfirmedQueryInput $input */ #[\Override] public function __invoke(QueryInput $input): GetTunnelOrderConfirmedQueryOutput { Assert::isInstanceOf($input, GetTunnelOrderConfirmedQueryInput::class); $order = $input->order; $order->loadMissing(['shop', 'lines']); $shop = $order->shop; if (! $shop) { throw new \UnexpectedValueException('Shop not found for order ' . $order->getId()); } $shopDto = ShopDto::fromModel($shop); $mapUrl = $this->mapUrlService->generateUrl($shopDto); $orderDto = OrderDto::fromModel($order); return new GetTunnelOrderConfirmedQueryOutput( step: OrderTunnelStep::CONFIRMATION, order: $orderDto, shop: $shopDto, mapUrl: $mapUrl, ); } }