ldc-arcadia-genesis-php-client/src/Repository/IncoCompoApiRepository.php

41 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Uwil\ArcadiaApiPhpClient\Repository;
use Uwil\ArcadiaApiPhpClient\Error\ApiError;
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\IncoCompo;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoCompoId;
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\IncoId;
use Uwil\ArcadiaApiPhpClient\Mapper\IncoCompoMapper;
use Uwil\ArcadiaKiotaOpenApiClient\ApiClient;
/**
* @internal
*/
final class IncoCompoApiRepository extends AbstractApiRepository implements IncoCompoRepository
{
public function __construct(
ApiClient $apiClient,
private readonly IncoCompoMapper $mapper,
) {
parent::__construct($apiClient);
}
public function find(IncoCompoId $id): IncoCompo | null | ApiError
{
return $this->findFor(new IncoId($id->value));
}
public function findFor(IncoId $id): IncoCompo | null | ApiError
{
return $this->catchNotFound(function () use ($id): ?IncoCompo {
/** @var \Uwil\ArcadiaKiotaOpenApiClient\Models\IncoCompoItemResponse|null $response */
$response = $this->apiClient->incoSheets()->byIncoId($id->value)->composition()->get()->wait();
$composition = $response?->getComposition();
return $composition !== null ? $this->mapper->toDto($composition) : null;
});
}
}