*/ final readonly class GetBoOrderDetailQuery implements Query { public function __construct( private CrmService $crmService, ) { } #[\Override] public function __invoke(QueryInput $input): GetBoOrderDetailQueryOutput { Assert::isInstanceOf($input, GetBoOrderDetailQueryInput::class); $order = $input->order; $order->load(['lines', 'shop']); $orderDto = OrderDto::fromModel($order); $shop = $orderDto->shop; $employee = $orderDto->employee; $linkedCustomer = $employee !== null ? Customer::query() ->whereHas('employee', fn (Builder $q) => $q->where( 'matricule', $employee->matricule->value ))->first() : null; $crmCustomerResult = $linkedCustomer !== null ? $this->crmService->getCustomerFromHashCode($linkedCustomer->hashcode) : null; $crmCustomer = $crmCustomerResult instanceof CrmCustomer ? $crmCustomerResult : null; return new GetBoOrderDetailQueryOutput( order: $orderDto, shop: $shop, employee: $employee, crmCustomer: $crmCustomer, ); } }