Skip to content

Commit 193218c

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

File tree

21 files changed

+495
-271
lines changed

21 files changed

+495
-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="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: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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\Doctrine\Orm\State\Provider;
21+
use Sylius\Resource\Metadata\DeleteOperationInterface;
22+
use Sylius\Resource\Metadata\GridAwareOperationInterface;
23+
use Sylius\Resource\Metadata\Operation;
24+
use Sylius\Resource\Metadata\Operations;
25+
use Sylius\Resource\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
26+
use Sylius\Resource\Metadata\Resource\ResourceMetadataCollection;
27+
use Sylius\Resource\Metadata\ResourceMetadata;
28+
29+
final class DoctrineORMResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface
30+
{
31+
public function __construct(
32+
private ManagerRegistry $managerRegistry,
33+
private ResourceMetadataCollectionFactoryInterface $decorated,
34+
) {
35+
}
36+
37+
public function create(string $resourceClass): ResourceMetadataCollection
38+
{
39+
$resourceCollectionMetadata = $this->decorated->create($resourceClass);
40+
41+
/** @var ResourceMetadata $resource */
42+
foreach ($resourceCollectionMetadata->getIterator() as $i => $resource) {
43+
$operations = $resource->getOperations() ?? new Operations();
44+
45+
$entityClass = $resource->getClass();
46+
47+
if (null === $entityClass) {
48+
continue;
49+
}
50+
51+
/** @var Operation $operation */
52+
foreach ($operations as $operation) {
53+
/** @var string $key */
54+
$key = $operation->getName();
55+
56+
$entityManager = $this->managerRegistry->getManagerForClass($entityClass);
57+
58+
if (!$entityManager instanceof EntityManagerInterface) {
59+
$operations->add($key, $operation);
60+
61+
continue;
62+
}
63+
64+
$operations->add($key, $this->addDefaults($operation));
65+
}
66+
67+
$resource = $resource->withOperations($operations);
68+
69+
$resourceCollectionMetadata[$i] = $resource;
70+
}
71+
72+
return $resourceCollectionMetadata;
73+
}
74+
75+
private function addDefaults(Operation $operation): Operation
76+
{
77+
$operation = $operation->withProvider($this->getProvider($operation));
78+
79+
return $operation->withProcessor($this->getProcessor($operation));
80+
}
81+
82+
private function getProvider(Operation $operation): callable|string|null
83+
{
84+
if (null !== $provider = $operation->getProvider()) {
85+
return $provider;
86+
}
87+
88+
if ($operation instanceof GridAwareOperationInterface && null !== $operation->getGrid()) {
89+
return null;
90+
}
91+
92+
return 'sylius.state_provider.doctrine.orm.state.provider';
93+
}
94+
95+
private function getProcessor(Operation $operation): callable|string
96+
{
97+
if (null !== $processor = $operation->getProcessor()) {
98+
return $processor;
99+
}
100+
101+
if ($operation instanceof DeleteOperationInterface) {
102+
return RemoveProcessor::class;
103+
}
104+
105+
return PersistProcessor::class;
106+
}
107+
}

0 commit comments

Comments
 (0)