Skip to content

Commit d8655a6

Browse files
committed
Use Repository managed by Doctrine
1 parent 5dd7383 commit d8655a6

File tree

21 files changed

+494
-271
lines changed

21 files changed

+494
-271
lines changed

src/Bundle/Resources/config/services/integrations/doctrine/orm.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@
2020
<services>
2121
<defaults public="true" />
2222

23+
<service id="sylius.doctrine_orm.metadata.resource.metadata_collection_factory"
24+
class="Sylius\Resource\Doctrine\ORM\Metadata\Resource\Factory\DoctrineORMResourceMetadataCollectionFactory"
25+
decorates="sylius.resource_metadata_collection.factory"
26+
decoration-priority="200"
27+
>
28+
<argument type="service" id="doctrine" />
29+
<argument type="service" id=".inner" />
30+
</service>
31+
32+
<service id="sylius.state_provider.doctrine.orm.state.provider" class="Sylius\Resource\Doctrine\ORM\State\Provider">
33+
<argument type="service" id="doctrine" />
34+
<argument type="service" id="sylius.repository_argument_resolver.request" />
35+
<argument type="service" id="sylius.expression_language.argument_parser.repository" />
36+
<argument type="tagged_locator" tag="sylius.state_provider" />
37+
<tag name="sylius.state_provider" />
38+
</service>
39+
<service id="Sylius\Resource\Doctrine\ORM\State\Provider" alias="sylius.state_provider.doctrine.orm.state.provider" />
40+
2341
<service id="sylius.event_subscriber.orm_mapped_super_class" class="Sylius\Bundle\ResourceBundle\EventListener\ORMMappedSuperClassSubscriber">
2442
<argument type="service" id="sylius.resource_registry" />
2543
<tag name="doctrine.event_listener" event="loadClassMetadata" priority="8192" />

src/Bundle/Resources/config/services/metadata.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@
3434
<argument>%sylius.state_machine_component.default%</argument>
3535
</service>
3636

37-
<service id="sylius.resource_metadata_collection.factory.doctrine"
38-
class="Sylius\Resource\Doctrine\Common\Metadata\Resource\Factory\DoctrineResourceMetadataCollectionFactory"
39-
decorates="sylius.resource_metadata_collection.factory"
40-
decoration-priority="200"
41-
>
42-
<argument type="service" id="sylius.resource_registry" />
43-
<argument type="service" id=".inner" />
44-
</service>
45-
4637
<service id="sylius.resource_metadata_collection.factory.redirect"
4738
class="Sylius\Resource\Metadata\Resource\Factory\RedirectResourceMetadataCollectionFactory"
4839
decorates="sylius.resource_metadata_collection.factory"

src/Bundle/Resources/config/services/state.xml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@
3737
</service>
3838
<service id="Sylius\Resource\State\ResponderInterface" alias="sylius.state_responder" />
3939

40-
<service id="Sylius\Resource\Symfony\Request\State\Provider">
41-
<argument type="tagged_locator" tag="sylius.repository" />
42-
<argument type="service" id="sylius.repository_argument_resolver.request" />
43-
<argument type="service" id="sylius.expression_language.argument_parser.repository" />
44-
<tag name="sylius.state_provider" />
45-
</service>
46-
4740
<service id="Sylius\Resource\StateMachine\State\ApplyStateMachineTransitionProcessor">
4841
<argument type="service" id="sylius.state_machine.operation" />
4942
<argument type="service" id="Sylius\Resource\Doctrine\Common\State\PersistProcessor" on-invalid="null" />

src/Component/spec/Symfony/Request/State/ProviderSpec.php

Lines changed: 0 additions & 175 deletions
This file was deleted.

src/Component/src/Doctrine/Common/Metadata/Resource/Factory/DoctrineResourceMetadataCollectionFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use Sylius\Resource\Doctrine\Common\State\PersistProcessor;
1717
use Sylius\Resource\Doctrine\Common\State\RemoveProcessor;
18+
use Sylius\Resource\Doctrine\ORM\Metadata\Resource\Factory\DoctrineORMResourceMetadataCollectionFactory;
1819
use Sylius\Resource\Metadata\DeleteOperationInterface;
1920
use Sylius\Resource\Metadata\Operation;
2021
use Sylius\Resource\Metadata\Operations;
@@ -29,6 +30,7 @@ public function __construct(
2930
private RegistryInterface $resourceRegistry,
3031
private ResourceMetadataCollectionFactoryInterface $decorated,
3132
) {
33+
trigger_deprecation('sylius/resource', '1.13', 'The "%s" is deprecated use "%s instead.', self::class, DoctrineORMResourceMetadataCollectionFactory::class);
3234
}
3335

3436
public function create(string $resourceClass): ResourceMetadataCollection
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Sylius package.
5+
*
6+
* (c) Sylius Sp. z o.o.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Sylius\Resource\Doctrine\ORM\Metadata\Resource\Factory;
15+
16+
use Doctrine\ORM\EntityManagerInterface;
17+
use Doctrine\Persistence\ManagerRegistry;
18+
use Sylius\Resource\Doctrine\Common\State\PersistProcessor;
19+
use Sylius\Resource\Doctrine\Common\State\RemoveProcessor;
20+
use Sylius\Resource\Metadata\DeleteOperationInterface;
21+
use Sylius\Resource\Metadata\GridAwareOperationInterface;
22+
use Sylius\Resource\Metadata\Operation;
23+
use Sylius\Resource\Metadata\Operations;
24+
use Sylius\Resource\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
25+
use Sylius\Resource\Metadata\Resource\ResourceMetadataCollection;
26+
use Sylius\Resource\Metadata\ResourceMetadata;
27+
28+
final class DoctrineORMResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface
29+
{
30+
public function __construct(
31+
private ManagerRegistry $managerRegistry,
32+
private ResourceMetadataCollectionFactoryInterface $decorated,
33+
) {
34+
}
35+
36+
public function create(string $resourceClass): ResourceMetadataCollection
37+
{
38+
$resourceCollectionMetadata = $this->decorated->create($resourceClass);
39+
40+
/** @var ResourceMetadata $resource */
41+
foreach ($resourceCollectionMetadata->getIterator() as $i => $resource) {
42+
$operations = $resource->getOperations() ?? new Operations();
43+
44+
$entityClass = $resource->getClass();
45+
46+
if (null === $entityClass) {
47+
continue;
48+
}
49+
50+
/** @var Operation $operation */
51+
foreach ($operations as $operation) {
52+
/** @var string $key */
53+
$key = $operation->getName();
54+
55+
$entityManager = $this->managerRegistry->getManagerForClass($entityClass);
56+
57+
if (!$entityManager instanceof EntityManagerInterface) {
58+
$operations->add($key, $operation);
59+
60+
continue;
61+
}
62+
63+
$operations->add($key, $this->addDefaults($operation));
64+
}
65+
66+
$resource = $resource->withOperations($operations);
67+
68+
$resourceCollectionMetadata[$i] = $resource;
69+
}
70+
71+
return $resourceCollectionMetadata;
72+
}
73+
74+
private function addDefaults(Operation $operation): Operation
75+
{
76+
$operation = $operation->withProvider($this->getProvider($operation));
77+
78+
return $operation->withProcessor($this->getProcessor($operation));
79+
}
80+
81+
private function getProvider(Operation $operation): callable|string|null
82+
{
83+
if (null !== $provider = $operation->getProvider()) {
84+
return $provider;
85+
}
86+
87+
if ($operation instanceof GridAwareOperationInterface && null !== $operation->getGrid()) {
88+
return null;
89+
}
90+
91+
return 'sylius.state_provider.doctrine.orm.state.provider';
92+
}
93+
94+
private function getProcessor(Operation $operation): callable|string
95+
{
96+
if (null !== $processor = $operation->getProcessor()) {
97+
return $processor;
98+
}
99+
100+
if ($operation instanceof DeleteOperationInterface) {
101+
return RemoveProcessor::class;
102+
}
103+
104+
return PersistProcessor::class;
105+
}
106+
}

0 commit comments

Comments
 (0)