. */ namespace SP\Domain\Client\Adapters; use League\Fractal\Resource\Collection; use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\QueryException; use SP\Core\Exceptions\SPException; use SP\DataModel\ClientData; use SP\Domain\Client\Ports\ClientAdapterInterface; use SP\Domain\Common\Adapters\Adapter; use SP\Domain\Common\Services\ServiceException; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\CustomField\Adapters\CustomFieldAdapter; use SP\Domain\CustomField\Ports\CustomFieldServiceInterface; use SP\Mvc\Controller\ItemTrait; use SP\Util\Link; /** * Class ClientAdapter * * @package SP\Adapters */ final class ClientAdapter extends Adapter implements ClientAdapterInterface { use ItemTrait; protected array $availableIncludes = ['customFields']; /** * @throws ConstraintException * @throws QueryException * @throws SPException * @throws ServiceException */ public function includeCustomFields(ClientData $data, CustomFieldServiceInterface $customFieldService): Collection { return $this->collection( $this->getCustomFieldsForItem(AclActionsInterface::CLIENT, $data->id, $customFieldService), new CustomFieldAdapter($this->configData) ); } public function transform(ClientData $data): array { return [ 'id' => $data->getId(), 'name' => $data->getName(), 'description' => $data->getDescription(), 'isGlobal' => $data->isGlobal, 'customFields' => null, 'links' => [ [ 'rel' => 'self', 'uri' => Link::getDeepLink( $data->getId(), AclActionsInterface::CLIENT_VIEW, $this->configData, true ), ], ], ]; } }