diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08c242f..2020442 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install PHP uses: shivammathur/setup-php@v2 @@ -36,7 +36,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}-${{ matrix.prefer }}- diff --git a/CHANGELOG.md b/CHANGELOG.md index 653d6a7..d1932ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Deprecated +- mark classes in namespace FreeElephants\JsonApiToolkit\DTO are deprecated + ### Changed - Add conflict with origin neomerx/json-api (use fork laravel-json-api/neomerx-json-api for best php 8.* support) +- Use DTO from free-elephants/json-api-dto ## [0.0.15] - 2025-02-06 diff --git a/composer.json b/composer.json index f35744c..96c0181 100644 --- a/composer.json +++ b/composer.json @@ -18,6 +18,7 @@ "doctrine/persistence": "^2.0|^3.0", "fig/http-message-util": "^1.0", "free-elephants/i18n": "^0.0.1", + "free-elephants/json-api-dto": "^0.0.1", "laminas/laminas-stratigility": "^3.2", "laravel-json-api/neomerx-json-api": "^5.0.2", "league/openapi-psr7-validator": "0.19 - 0.22", diff --git a/src/FreeElephants/JsonApiToolkit/DTO/AbstractAttributes.php b/src/FreeElephants/JsonApiToolkit/DTO/AbstractAttributes.php index 4021bf4..bb5b1b0 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/AbstractAttributes.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/AbstractAttributes.php @@ -2,6 +2,10 @@ namespace FreeElephants\JsonApiToolkit\DTO; -abstract class AbstractAttributes extends BaseKeyValueStructure +/** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\AbstractAttributes + */ +abstract class AbstractAttributes extends \FreeElephants\JsonApi\DTO\AbstractAttributes { } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/AbstractDocument.php b/src/FreeElephants/JsonApiToolkit/DTO/AbstractDocument.php index f3275cc..fe00e08 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/AbstractDocument.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/AbstractDocument.php @@ -5,30 +5,10 @@ use Psr\Http\Message\MessageInterface; /** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\AbstractDocument * @property AbstractResourceObject|mixed $data */ -abstract class AbstractDocument +abstract class AbstractDocument extends \FreeElephants\JsonApi\DTO\AbstractDocument { - final public function __construct(array $data) - { - $concreteClass = new \ReflectionClass($this); - $dataProperty = $concreteClass->getProperty('data'); - /** @var \ReflectionNamedType $reflectionType */ - $reflectionType = $dataProperty->getType(); - $dataClassName = $reflectionType->getName(); - $this->data = new $dataClassName($data['data']); - } - - /** - * @param MessageInterface $httpMessage - * @return static - */ - public static function fromHttpMessage(MessageInterface $httpMessage): self - { - $httpMessage->getBody()->rewind(); - $rawJson = $httpMessage->getBody()->getContents(); - $decodedJson = json_decode($rawJson, true); - - return new static($decodedJson); - } } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/AbstractRelationships.php b/src/FreeElephants/JsonApiToolkit/DTO/AbstractRelationships.php index 354596b..ef1324f 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/AbstractRelationships.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/AbstractRelationships.php @@ -2,12 +2,10 @@ namespace FreeElephants\JsonApiToolkit\DTO; -abstract class AbstractRelationships +/** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\AbstractRelationships + */ +abstract class AbstractRelationships extends \FreeElephants\JsonApi\DTO\AbstractRelationships { - public function __construct(array $data) - { - foreach ($data as $relationshipName => $relationshipsData) { - $this->{$relationshipName} = new RelationshipToOne($relationshipsData); - } - } } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/AbstractResourceObject.php b/src/FreeElephants/JsonApiToolkit/DTO/AbstractResourceObject.php index 76b5c15..18c8d1f 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/AbstractResourceObject.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/AbstractResourceObject.php @@ -5,42 +5,10 @@ use FreeElephants\JsonApiToolkit\DTO\Reflection\SuitableRelationshipsTypeDetector; /** - * @property AbstractAttributes $attributes - * @property AbstractRelationships $relationships + * + * @deprecated + * @see \FreeElephants\JsonApi\DTO\AbstractResourceObject */ -class AbstractResourceObject +class AbstractResourceObject extends \FreeElephants\JsonApi\DTO\AbstractResourceObject { - public string $id; - public string $type; - - public function __construct(array $data) - { - $this->id = $data['id']; - $this->type = $data['type']; - - $concreteClass = new \ReflectionClass($this); - - if (property_exists($this, 'attributes')) { - $attributesProperty = $concreteClass->getProperty('attributes'); - $attributesClass = $attributesProperty->getType()->getName(); - $this->attributes = new $attributesClass($data['attributes']); - } - - if (property_exists($this, 'relationships')) { - $relationshipsData = $data['relationships']; - $concreteClass = new \ReflectionClass($this); - $relationshipsProperty = $concreteClass->getProperty('relationships'); - $reflectionType = $relationshipsProperty->getType(); - - // handle php 8 union types - if ($reflectionType instanceof \ReflectionUnionType) { - $relationshipsClass = (new SuitableRelationshipsTypeDetector())->detect($reflectionType, $relationshipsData); - } else { - $relationshipsClass = $reflectionType->getName(); - } - - $relationshipsDto = new $relationshipsClass($relationshipsData); - $this->relationships = $relationshipsDto; - } - } } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/BaseKeyValueStructure.php b/src/FreeElephants/JsonApiToolkit/DTO/BaseKeyValueStructure.php index 5c6c17d..4d83dd2 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/BaseKeyValueStructure.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/BaseKeyValueStructure.php @@ -2,21 +2,10 @@ namespace FreeElephants\JsonApiToolkit\DTO; -class BaseKeyValueStructure +/** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\BaseKeyValueStructure + */ +class BaseKeyValueStructure extends \FreeElephants\JsonApi\DTO\BaseKeyValueStructure { - public function __construct(array $attributes) - { - $concreteClass = new \ReflectionClass($this); - foreach ($attributes as $name => $value) { - $property = $concreteClass->getProperty($name); - if ($property->hasType()) { - $propertyType = $property->getType(); - if ($propertyType instanceof \ReflectionNamedType && !$propertyType->isBuiltin()) { - $propertyClassName = $propertyType->getName(); - $value = new $propertyClassName($value); - } - } - $this->{$name} = $value; - } - } } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/RelationshipToOne.php b/src/FreeElephants/JsonApiToolkit/DTO/RelationshipToOne.php index 1ddc2b3..a78d870 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/RelationshipToOne.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/RelationshipToOne.php @@ -2,7 +2,10 @@ namespace FreeElephants\JsonApiToolkit\DTO; -class RelationshipToOne extends AbstractDocument +/** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\RelationshipToOne + */ +class RelationshipToOne extends \FreeElephants\JsonApi\DTO\RelationshipToOne { - public ResourceIdentifierObject $data; } diff --git a/src/FreeElephants/JsonApiToolkit/DTO/ResourceIdentifierObject.php b/src/FreeElephants/JsonApiToolkit/DTO/ResourceIdentifierObject.php index f58aa7e..b60be1a 100644 --- a/src/FreeElephants/JsonApiToolkit/DTO/ResourceIdentifierObject.php +++ b/src/FreeElephants/JsonApiToolkit/DTO/ResourceIdentifierObject.php @@ -2,14 +2,10 @@ namespace FreeElephants\JsonApiToolkit\DTO; -class ResourceIdentifierObject +/** + * @deprecated + * @see \FreeElephants\JsonApi\DTO\ResourceIdentifierObject + */ +class ResourceIdentifierObject extends \FreeElephants\JsonApi\DTO\ResourceIdentifierObject { - public string $id; - public string $type; - - public function __construct(array $data) - { - $this->id = $data['id']; - $this->type = $data['type']; - } } diff --git a/tests/FreeElephants/JsonApiToolkit/DTO/DocumentTest.php b/tests/FreeElephants/JsonApiToolkit/DTO/DocumentTest.php index 6ac771c..a0a2e26 100644 --- a/tests/FreeElephants/JsonApiToolkit/DTO/DocumentTest.php +++ b/tests/FreeElephants/JsonApiToolkit/DTO/DocumentTest.php @@ -70,7 +70,7 @@ class FooAttributes extends AbstractAttributes class FooRelationships extends AbstractRelationships { - public RelationshipToOne $baz; + public \FreeElephants\JsonApi\DTO\RelationshipToOne $baz; } class Nested extends BaseKeyValueStructure diff --git a/tests/FreeElephants/JsonApiToolkit/DTO/Example/OneRelationships.php b/tests/FreeElephants/JsonApiToolkit/DTO/Example/OneRelationships.php index b62c848..4ad123b 100644 --- a/tests/FreeElephants/JsonApiToolkit/DTO/Example/OneRelationships.php +++ b/tests/FreeElephants/JsonApiToolkit/DTO/Example/OneRelationships.php @@ -7,5 +7,5 @@ class OneRelationships extends AbstractRelationships { - public RelationshipToOne $one; + public \FreeElephants\JsonApi\DTO\RelationshipToOne $one; }