. */ namespace SP\Domain\Client\Adapters; use League\Fractal\Resource\Collection; use SP\Domain\Client\Models\Client as ClientModel; use SP\Domain\Client\Ports\ClientAdapter; use SP\Domain\Common\Adapters\Adapter; use SP\Domain\Common\Models\Model; use SP\Domain\Common\Providers\Link; use SP\Domain\Common\Services\ServiceException; use SP\Domain\Config\Ports\ConfigDataInterface; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Acl\ActionNotFoundException; use SP\Domain\Core\Acl\ActionsInterface; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Core\Exceptions\SPException; use SP\Domain\CustomField\Adapters\CustomField; use SP\Domain\CustomField\Ports\CustomFieldDataService; use SP\Mvc\Controller\ItemTrait; /** * Class Client */ final class Client extends Adapter implements ClientAdapter { use ItemTrait; protected array $availableIncludes = ['customFields']; public function __construct( ConfigDataInterface $configData, string $baseUrl, private readonly CustomFieldDataService $customFieldDataService, private readonly ActionsInterface $actions ) { parent::__construct($configData, $baseUrl); } /** * @throws ConstraintException * @throws QueryException * @throws SPException * @throws ServiceException */ public function includeCustomFields(ClientModel $client): Collection { return $this->collection( $this->getCustomFieldsForItem(AclActionsInterface::CLIENT, $client->getId(), $this->customFieldDataService), new CustomField($this->configData, $this->baseUrl) ); } /** * @throws ActionNotFoundException */ public function transform(Model|ClientModel $data): array { $actionRoute = $this->actions->getActionById(AclActionsInterface::CLIENT_VIEW)->getRoute(); return [ 'id' => $data->getId(), 'name' => $data->getName(), 'description' => $data->getDescription(), 'isGlobal' => $data->getIsGlobal(), 'customFields' => null, 'links' => [ [ 'rel' => 'self', 'uri' => Link::getDeepLink( $data->getId(), $actionRoute, $this->configData, $this->baseUrl ), ], ], ]; } }