customerRepository = $customerRepository; $this->serviceOutputProcessor = $serviceOutputProcessor; $this->serializer = $serializer; } /** * Get customer data by Id or empty array * * @param int $customerId * @return array * @throws NoSuchEntityException|LocalizedException */ public function getCustomerById(int $customerId): array { try { $customer = $this->customerRepository->getById($customerId); } catch (NoSuchEntityException $e) { throw new GraphQlNoSuchEntityException( __('Customer id "%customer_id" does not exist.', ['customer_id' => $customerId]), $e ); } return $this->processCustomer($customer); } /** * Curate default shipping and default billing keys * * @param array $arrayAddress * @return array */ private function curateAddressData(array $arrayAddress) : array { foreach ($arrayAddress as $key => $address) { if (!isset($address['default_shipping'])) { $arrayAddress[$key]['default_shipping'] = false; } if (!isset($address['default_billing'])) { $arrayAddress[$key]['default_billing'] = false; } } return $arrayAddress; } /** * Transform single customer data from object to in array format * * @param CustomerInterface $customer * @return array */ private function processCustomer(CustomerInterface $customer): array { $customerData = $this->serviceOutputProcessor->process( $customer, CustomerRepositoryInterface::class, 'get' ); $customerData['addresses'] = $this->curateAddressData($customerData['addresses']); if (isset($customerData['extension_attributes'])) { $customerData = array_merge($customerData, $customerData['extension_attributes']); } $customAttributes = []; if (isset($customerData['custom_attributes'])) { foreach ($customerData['custom_attributes'] as $attribute) { $isArray = false; if (is_array($attribute['value'])) { $isArray = true; foreach ($attribute['value'] as $attributeValue) { if (is_array($attributeValue)) { $customAttributes[$attribute['attribute_code']] = $this->serializer->serialize( $attribute['value'] ); continue; } $customAttributes[$attribute['attribute_code']] = implode(',', $attribute['value']); continue; } } if ($isArray) { continue; } $customAttributes[$attribute['attribute_code']] = $attribute['value']; } } $customerData = array_merge($customerData, $customAttributes); return $customerData; } }