Skip to content

Commit d7a9eb2

Browse files
committed
elasticsearch
1 parent b0b3b19 commit d7a9eb2

File tree

5 files changed

+36
-23
lines changed

5 files changed

+36
-23
lines changed

src/Elasticsearch/Metadata/Document/Factory/AttributeDocumentMetadataFactory.php

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\Elasticsearch\Metadata\Document\Factory;
1515

1616
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
17+
use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
1718
use ApiPlatform\Elasticsearch\Exception\IndexNotFoundException;
1819
use ApiPlatform\Elasticsearch\Metadata\Document\DocumentMetadata;
1920

@@ -26,10 +27,16 @@
2627
*/
2728
final class AttributeDocumentMetadataFactory implements DocumentMetadataFactoryInterface
2829
{
30+
/**
31+
* @var ResourceMetadataFactoryInterface|ResourceMetadataCollectionFactoryInterface
32+
*/
2933
private $resourceMetadataFactory;
3034
private $decorated;
3135

32-
public function __construct(ResourceMetadataFactoryInterface $resourceMetadataFactory, ?DocumentMetadataFactoryInterface $decorated = null)
36+
/**
37+
* @param ResourceMetadataFactoryInterface|ResourceMetadataCollectionFactoryInterface $resourceMetadataFactory
38+
*/
39+
public function __construct($resourceMetadataFactory, ?DocumentMetadataFactoryInterface $decorated = null)
3340
{
3441
$this->resourceMetadataFactory = $resourceMetadataFactory;
3542
$this->decorated = $decorated;
@@ -52,17 +59,21 @@ public function create(string $resourceClass): DocumentMetadata
5259
$resourceMetadata = null;
5360

5461
if (!$documentMetadata || null === $documentMetadata->getIndex()) {
62+
/** @var ResourceMetadata|ResourceMetadataCollection */
5563
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
5664

57-
if (null !== $index = $resourceMetadata->getAttribute('elasticsearch_index')) {
65+
$index = $resourceMetadata instanceof ResourceMetadata ? $resourceMetadata->getAttribute('elasticsearch_index') : $resourceMetadata->getOperation()->getExtraProperties('elasticsearch_index');
66+
67+
if (null !== $index) {
5868
$documentMetadata = $documentMetadata ? $documentMetadata->withIndex($index) : new DocumentMetadata($index);
5969
}
6070
}
6171

6272
if (!$documentMetadata || DocumentMetadata::DEFAULT_TYPE === $documentMetadata->getType()) {
6373
$resourceMetadata = $resourceMetadata ?? $this->resourceMetadataFactory->create($resourceClass);
74+
$type = $resourceMetadata instanceof ResourceMetadata ? $resourceMetadata->getAttribute('elasticsearch_type') : $resourceMetadata->getOperation()->getExtraProperties('elasticsearch_type');
6475

65-
if (null !== $type = $resourceMetadata->getAttribute('elasticsearch_type')) {
76+
if (null !== $type) {
6677
$documentMetadata = $documentMetadata ? $documentMetadata->withType($type) : new DocumentMetadata(null, $type);
6778
}
6879
}

src/Elasticsearch/Metadata/Document/Factory/CatDocumentMetadataFactory.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
1414
namespace ApiPlatform\Elasticsearch\Metadata\Document\Factory;
1515

1616
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
17+
use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;
1718
use ApiPlatform\Elasticsearch\Exception\IndexNotFoundException;
1819
use ApiPlatform\Elasticsearch\Metadata\Document\DocumentMetadata;
20+
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
21+
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;
1922
use ApiPlatform\Util\Inflector;
2023
use Elasticsearch\Client;
2124
use Elasticsearch\Common\Exceptions\Missing404Exception;
@@ -32,10 +35,16 @@
3235
final class CatDocumentMetadataFactory implements DocumentMetadataFactoryInterface
3336
{
3437
private $client;
38+
/**
39+
* @var ResourceMetadataFactoryInterface|ResourceMetadataCollectionFactoryInterface
40+
*/
3541
private $resourceMetadataFactory;
3642
private $decorated;
3743

38-
public function __construct(Client $client, ResourceMetadataFactoryInterface $resourceMetadataFactory, ?DocumentMetadataFactoryInterface $decorated = null)
44+
/**
45+
* @param ResourceMetadataFactoryInterface|ResourceMetadataCollectionFactoryInterface $resourceMetadataFactory
46+
*/
47+
public function __construct(Client $client, $resourceMetadataFactory, ?DocumentMetadataFactoryInterface $decorated = null)
3948
{
4049
$this->client = $client;
4150
$this->resourceMetadataFactory = $resourceMetadataFactory;
@@ -60,7 +69,15 @@ public function create(string $resourceClass): DocumentMetadata
6069
return $documentMetadata;
6170
}
6271

63-
if (null === $resourceShortName = $this->resourceMetadataFactory->create($resourceClass)->getShortName()) {
72+
/** @var ResourceMetadata|ResourceMetadataCollection */
73+
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
74+
if ($resourceMetadata instanceof ResourceMetadata) {
75+
$resourceShortName = $resourceMetadata->getShortName();
76+
} else {
77+
$resourceShortName = $resourceMetadata->getOperation()->getShortName();
78+
}
79+
80+
if (null === $resourceShortName) {
6481
return $this->handleNotFound($documentMetadata, $resourceClass);
6582
}
6683

src/Elasticsearch/Metadata/Resource/Factory/ElasticsearchProviderResourceMetadataCollectionFactory.php

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
namespace ApiPlatform\Elasticsearch\Metadata\Resource\Factory;
1515

16-
use ApiPlatform\Elasticsearch\Exception\IndexNotFoundException;
17-
use ApiPlatform\Elasticsearch\Metadata\Document\Factory\DocumentMetadataFactoryInterface;
1816
use ApiPlatform\Elasticsearch\State\CollectionProvider;
1917
use ApiPlatform\Elasticsearch\State\ItemProvider;
2018
use ApiPlatform\Metadata\CollectionOperationInterface;
@@ -28,14 +26,8 @@ final class ElasticsearchProviderResourceMetadataCollectionFactory implements Re
2826
*/
2927
private $decorated;
3028

31-
/**
32-
* @var DocumentMetadataFactoryInterface
33-
*/
34-
private $documentMetadataFactory;
35-
36-
public function __construct(DocumentMetadataFactoryInterface $documentMetadataFactory, ResourceMetadataCollectionFactoryInterface $decorated)
29+
public function __construct(ResourceMetadataCollectionFactoryInterface $decorated)
3730
{
38-
$this->documentMetadataFactory = $documentMetadataFactory;
3931
$this->decorated = $decorated;
4032
}
4133

@@ -46,12 +38,6 @@ public function create(string $resourceClass): ResourceMetadataCollection
4638
{
4739
$resourceMetadataCollection = $this->decorated->create($resourceClass);
4840

49-
try {
50-
$this->documentMetadataFactory->create($resourceClass);
51-
} catch (IndexNotFoundException $e) {
52-
return $resourceMetadataCollection;
53-
}
54-
5541
foreach ($resourceMetadataCollection as $i => $resourceMetadata) {
5642
$operations = $resourceMetadata->getOperations();
5743

src/Symfony/Bundle/Resources/config/elasticsearch.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
</service>
2525

2626
<service id="api_platform.elasticsearch.metadata.document.metadata_factory.attribute" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\AttributeDocumentMetadataFactory" decorates="api_platform.elasticsearch.metadata.document.metadata_factory" decoration-priority="20" public="false">
27-
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
27+
<argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.retro_compatible" />
2828
<argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory.attribute.inner" />
2929
</service>
3030

3131
<service id="api_platform.elasticsearch.metadata.document.metadata_factory.cat" class="ApiPlatform\Elasticsearch\Metadata\Document\Factory\CatDocumentMetadataFactory" decorates="api_platform.elasticsearch.metadata.document.metadata_factory" decoration-priority="10" public="false">
3232
<argument type="service" id="api_platform.elasticsearch.client" />
33-
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
33+
<argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.retro_compatible" />
3434
<argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory.cat.inner" />
3535
</service>
3636

src/Symfony/Bundle/Resources/config/v3/elasticsearch.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
</service>
2626

2727
<service id="api_platform.elasticsearch.metadata.resource.metadata_collection_factory" class="ApiPlatform\Elasticsearch\Metadata\Resource\Factory\ElasticsearchProviderResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="40">
28-
<argument type="service" id="api_platform.elasticsearch.metadata.document.metadata_factory" />
2928
<argument type="service" id="api_platform.elasticsearch.metadata.resource.metadata_collection_factory.inner" />
3029
</service>
3130

0 commit comments

Comments
 (0)