From 0e11d53917ed978e564a625b79a0255c7d67165b Mon Sep 17 00:00:00 2001 From: Julien LARY Date: Tue, 9 Nov 2021 11:03:19 +0100 Subject: [PATCH] update generation rules --- .../Rector/Service/SubresourceTransformer.php | 20 +-- .../Service/SubresourceTransformerTest.php | 143 +++++++----------- 2 files changed, 65 insertions(+), 98 deletions(-) diff --git a/src/Core/Bridge/Rector/Service/SubresourceTransformer.php b/src/Core/Bridge/Rector/Service/SubresourceTransformer.php index 5bd5826ec87..38071d3ce6f 100644 --- a/src/Core/Bridge/Rector/Service/SubresourceTransformer.php +++ b/src/Core/Bridge/Rector/Service/SubresourceTransformer.php @@ -18,6 +18,7 @@ use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver as ODMAnnotationDriver; use Doctrine\ODM\MongoDB\Mapping\MappingException as ODMMappingException; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\MappingException; use Doctrine\Persistence\Mapping\RuntimeReflectionService; @@ -46,10 +47,7 @@ public function toUriVariables(array $subresourceMetadata): array $uriVariables[$identifier] = [ 'from_class' => $fromClass, - 'inverse_property' => null, 'from_property' => null, - 'to_class' => $toClass, - 'property' => null, 'to_property' => null, 'identifiers' => $fromPathVariable ? [$fromIdentifier] : [], 'composite_identifier' => false, @@ -64,13 +62,15 @@ public function toUriVariables(array $subresourceMetadata): array $toClass = $fromClass; if (isset($fromProperty, $fromClassMetadataAssociationMappings[$fromProperty])) { - $uriVariables[$identifier]['inverse_property'] = $fromProperty; + if ($fromClassMetadataAssociationMappings[$fromProperty]['type'] & ClassMetadataInfo::TO_MANY && isset($fromClassMetadataAssociationMappings[$fromProperty]['mappedBy'])){ + $uriVariables[$identifier]['to_property'] = $fromClassMetadataAssociationMappings[$fromProperty]['mappedBy']; + $fromProperty = $identifier; + continue; + } $uriVariables[$identifier]['from_property'] = $fromProperty; $fromProperty = $identifier; - continue; } } - return array_reverse($uriVariables); } @@ -84,10 +84,10 @@ private function getDoctrineMetadata(string $class): ClassMetadata } catch (MappingException $e) { } -// try { -// $this->odmMetadataFactory->loadMetadataForClass($class, $metadata); -// } catch (ODMMappingException $e) { -// } + try { + $this->odmMetadataFactory->loadMetadataForClass($class, $metadata); + } catch (ODMMappingException $e) { + } return $metadata; } diff --git a/tests/Core/Bridge/Rector/Service/SubresourceTransformerTest.php b/tests/Core/Bridge/Rector/Service/SubresourceTransformerTest.php index 32b345f4b4f..c4de085358c 100644 --- a/tests/Core/Bridge/Rector/Service/SubresourceTransformerTest.php +++ b/tests/Core/Bridge/Rector/Service/SubresourceTransformerTest.php @@ -54,7 +54,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => Question::class, 'from_property' => 'answer', - 'to_class' => Answer::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -64,22 +63,13 @@ public function toUriVariablesProvider(): \Generator ]; yield '/questions/{id}/answer/related_questions' => [ - //api_questions_answer_related_questions_get_subresource [ 'property' => 'relatedQuestions', 'collection' => true, 'resource_class' => Question::class, 'identifiers' => [ - 'id' => [ - Question::class, - 'id', - true, - ], - 'answer' => [ - Answer::class, - 'id', - false, - ], + 'id' => [Question::class, 'id', true], + 'answer' => [Answer::class, 'id', false], ], 'path' => '/questions/{id}/answer/related_questions.{_format}', ], @@ -87,7 +77,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => Question::class, 'from_property' => 'answer', - 'to_class' => Answer::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -95,9 +84,8 @@ public function toUriVariablesProvider(): \Generator ], 'answer' => [ 'from_class' => Answer::class, - 'from_property' => 'relatedQuestions', - 'to_class' => Question::class, - 'to_property' => null, + 'from_property' => null, + 'to_property' => 'answer', 'identifiers' => [], 'composite_identifier' => false, 'expanded_value' => 'answer', @@ -106,7 +94,6 @@ public function toUriVariablesProvider(): \Generator ]; yield '/dummies/{id}/related_dummies' => [ - //'api_dummies_related_dummies_get_subresource' [ 'property' => 'relatedDummies', 'collection' => true, @@ -118,7 +105,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => Dummy::class, 'from_property' => 'relatedDummies', - 'to_class' => RelatedDummy::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -128,7 +114,6 @@ public function toUriVariablesProvider(): \Generator ]; yield '/dummies/{id}/related_dummies/{relatedDummies}' => [ - //'api_dummies_related_dummies_item_get_subresource' [ 'property' => 'id', 'collection' => false, @@ -143,7 +128,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => Dummy::class, 'from_property' => 'relatedDummies', - 'to_class' => RelatedDummy::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -152,7 +136,6 @@ public function toUriVariablesProvider(): \Generator 'relatedDummies' => [ 'from_class' => RelatedDummy::class, 'from_property' => null, - 'to_class' => RelatedDummy::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -162,7 +145,6 @@ public function toUriVariablesProvider(): \Generator ]; yield '/dummies/{id}/related_dummies/{relatedDummies}/third_level' => [ - //api_dummies_related_dummies_item_third_level_get_subresource [ 'property' => 'thirdLevel', 'collection' => false, @@ -177,7 +159,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => Dummy::class, 'from_property' => 'relatedDummies', - 'to_class' => RelatedDummy::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -186,7 +167,6 @@ public function toUriVariablesProvider(): \Generator 'relatedDummies' => [ 'from_class' => RelatedDummy::class, 'from_property' => 'thirdLevel', - 'to_class' => ThirdLevel::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, @@ -195,79 +175,70 @@ public function toUriVariablesProvider(): \Generator ] ]; - yield '/dummies/{id}/related_dummies/{relatedDummies}/third_level/fourth_level' => [ - //api_dummies_related_dummies_third_level_fourth_level_get_subresource - [ - 'property' => 'fourthLevel', - 'collection' => false, - 'resource_class' => FourthLevel::class, - 'identifiers' => [ - 'id' => [Dummy::class, 'id', true], - 'relatedDummies' => [RelatedDummy::class, 'id', true], - 'thirdLevel' => [ThirdLevel::class, 'id', false], - ], - 'path' => '/dummies/{id}/related_dummies/{relatedDummies}/third_level/fourth_level.{_format}' - ], - [ - 'id' => [ - 'from_class' => Dummy::class, - 'from_property' => 'relatedDummies', - 'to_class' => RelatedDummy::class, - 'to_property' => null, - 'identifiers' => ['id'], - 'composite_identifier' => false, - 'expanded_value' => null, - ], - 'relatedDummies' => [ - 'from_class' => RelatedDummy::class, - 'from_property' => 'thirdLevel', - 'to_class' => ThirdLevel::class, - 'to_property' => null, - 'identifiers' => ['id'], - 'composite_identifier' => false, - 'expanded_value' => null, - ], - 'thirdLevel' => [ - 'from_class' => ThirdLevel::class, - 'from_property' => 'fourthLevel', - 'to_class' => FourthLevel::class, - 'to_property' => null, - 'identifiers' => [], - 'composite_identifier' => false, - 'expanded_value' => 'third_level', - ] - ] - ]; + yield '/dummies/{id}/related_dummies/{relatedDummies}/third_level/fourth_level' => [ + [ + 'property' => 'fourthLevel', + 'collection' => false, + 'resource_class' => FourthLevel::class, + 'identifiers' => [ + 'id' => [Dummy::class, 'id', true], + 'relatedDummies' => [RelatedDummy::class, 'id', true], + 'thirdLevel' => [ThirdLevel::class, 'id', false], + ], + 'path' => '/dummies/{id}/related_dummies/{relatedDummies}/third_level/fourth_level.{_format}' + ], + [ + 'id' => [ + 'from_class' => Dummy::class, + 'from_property' => 'relatedDummies', + 'to_property' => null, + 'identifiers' => ['id'], + 'composite_identifier' => false, + 'expanded_value' => null, + ], + 'relatedDummies' => [ + 'from_class' => RelatedDummy::class, + 'from_property' => 'thirdLevel', + 'to_property' => null, + 'identifiers' => ['id'], + 'composite_identifier' => false, + 'expanded_value' => null, + ], + 'thirdLevel' => [ + 'from_class' => ThirdLevel::class, + 'from_property' => 'fourthLevel', + 'to_property' => null, + 'identifiers' => [], + 'composite_identifier' => false, + 'expanded_value' => 'third_level', + ] + ] + ]; yield '/dummy_products/{id}/offers/{offers}/offers' => [ [ 'property' => 'offers', 'collection' => true, - 'resource_class' => DummyAggregateOffer::class, + 'resource_class' => DummyOffer::class, 'identifiers' => [ - 'id' => [ - DummyProduct::class, - 'id', - true - ] + 'id' => [DummyProduct::class, 'id', true], + 'offers' => [DummyAggregateOffer::class, 'id', true], ], - 'path' => '/dummy_products/{id}/offers/{offers}/offers.{_format}' + 'path' => '/dummy_products/{id}/offers/{offers}/offers.{_format}', ], [ 'id' => [ 'from_class' => DummyProduct::class, + 'from_property' => null, 'to_property' => 'product', - 'to_class' => null, - 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, 'expanded_value' => null, ], 'offers' => [ 'from_class' => DummyAggregateOffer::class, + 'from_property' => null, 'to_property' => 'aggregate', - 'to_class' => null, - 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, 'expanded_value' => null, @@ -288,9 +259,8 @@ public function toUriVariablesProvider(): \Generator [ 'id' => [ 'from_class' => DummyAggregateOffer::class, - 'from_property' => 'offers', - 'to_class' => DummyOffer::class, - 'to_property' => null, + 'from_property' => null, + 'to_property' => 'aggregate', 'identifiers' => ['id'], 'composite_identifier' => false, 'expanded_value' => null, @@ -311,9 +281,8 @@ public function toUriVariablesProvider(): \Generator [ 'id' => [ 'from_class' => Person::class, - 'from_property' => 'sentGreetings', - 'to_class' => Greeting::class, - 'to_property' => null, + 'from_property' => null, + 'to_property' => 'sender', 'identifiers' => ['id'], 'composite_identifier' => false, 'expanded_value' => null, @@ -334,9 +303,8 @@ public function toUriVariablesProvider(): \Generator [ 'id' => [ 'from_class' => RelatedOwnedDummy::class, - 'from_property' => null, - 'to_class' => Dummy::class, - 'to_property' => 'owningDummy', + 'from_property' => 'owningDummy', + 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false, 'expanded_value' => null, @@ -358,7 +326,6 @@ public function toUriVariablesProvider(): \Generator 'id' => [ 'from_class' => RelatedOwningDummy::class, 'from_property' => 'ownedDummy', - 'to_class' => Dummy::class, 'to_property' => null, 'identifiers' => ['id'], 'composite_identifier' => false,