Skip to content

Commit 2a173fb

Browse files
committed
start fixing mongodb
1 parent ae0d869 commit 2a173fb

File tree

6 files changed

+50
-7
lines changed

6 files changed

+50
-7
lines changed

src/Core/Bridge/Doctrine/MongoDbOdm/CollectionDataProvider.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
1919
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
2020
use ApiPlatform\Core\Exception\RuntimeException;
21+
use ApiPlatform\Exception\OperationNotFoundException;
2122
use Doctrine\ODM\MongoDB\DocumentManager;
2223
use Doctrine\ODM\MongoDB\Repository\DocumentRepository;
2324
use Doctrine\Persistence\ManagerRegistry;
@@ -74,7 +75,13 @@ public function getCollection(string $resourceClass, string $operationName = nul
7475
}
7576
}
7677

77-
$attribute = $this->resourceMetadataFactory->create($resourceClass)->getOperation($operationName)->getExtraProperties()['doctrine_mongodb'] ?? [];
78+
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
79+
try {
80+
$operation = $context['operation'] ?? (isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName));
81+
$attribute = $operation->getExtraProperties()['doctrine_mongodb'] ?? [];
82+
} catch (OperationNotFoundException $e) {
83+
$attribute = $resourceMetadata->getOperation(null, true)->getExtraProperties()['doctrine_mongodb'] ?? [];
84+
}
7885
$executeOptions = $attribute['execute_options'] ?? [];
7986

8087
return $aggregationBuilder->hydrate($resourceClass)->execute($executeOptions);

src/Core/Bridge/Doctrine/MongoDbOdm/Extension/FilterExtension.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Core\Api\FilterLocatorTrait;
1818
use ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter\FilterInterface;
1919
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
20+
use ApiPlatform\Exception\OperationNotFoundException;
2021
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
2122
use Doctrine\ODM\MongoDB\Aggregation\Builder;
2223
use Psr\Container\ContainerInterface;
@@ -54,7 +55,13 @@ public function __construct($resourceMetadataFactory, $filterLocator)
5455
*/
5556
public function applyToCollection(Builder $aggregationBuilder, string $resourceClass, string $operationName = null, array &$context = [])
5657
{
57-
$resourceFilters = $this->resourceMetadataFactory->create($resourceClass)->getOperation($operationName)->getFilters();
58+
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
59+
try {
60+
$operation = isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName);
61+
$resourceFilters = $operation->getFilters();
62+
} catch (OperationNotFoundException $e) {
63+
$resourceFilters = $resourceMetadata->getOperation(null, true)->getFilters();
64+
}
5865

5966
if (empty($resourceFilters)) {
6067
return;

src/Core/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait;
1717
use ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\PropertyHelperTrait as MongoDbOdmPropertyHelperTrait;
1818
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
19+
use ApiPlatform\Exception\OperationNotFoundException;
1920
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
2021
use Doctrine\ODM\MongoDB\Aggregation\Builder;
2122
use Doctrine\Persistence\ManagerRegistry;
@@ -59,8 +60,16 @@ public function applyToCollection(Builder $aggregationBuilder, string $resourceC
5960
$identifiers = $classMetaData->getIdentifier();
6061
if (null !== $this->resourceMetadataFactory) {
6162
if ($this->resourceMetadataFactory instanceof ResourceMetadataCollectionFactoryInterface) {
62-
$metadata = $this->resourceMetadataFactory->create($resourceClass);
63-
$defaultOrder = isset($context['graphql_operation_name']) ? $metadata->getGraphQlOperation($operationName)->getOrder() : $metadata->getOperation($operationName)->getOrder();
63+
if (isset($context['operation'])) {
64+
$defaultOrder = $context['operation']->getOrder();
65+
} else {
66+
$metadata = $this->resourceMetadataFactory->create($resourceClass);
67+
try {
68+
$defaultOrder = isset($context['graphql_operation_name']) ? $metadata->getGraphQlOperation($operationName)->getOrder() : $metadata->getOperation($operationName)->getOrder();
69+
} catch (OperationNotFoundException $e) {
70+
$defaultOrder = $metadata->getOperation(null, true)->getOrder();
71+
}
72+
}
6473
} else {
6574
$defaultOrder = $this->resourceMetadataFactory->create($resourceClass)->getAttribute('order');
6675
}

src/Core/Bridge/Doctrine/MongoDbOdm/Extension/PaginationExtension.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Core\DataProvider\Pagination;
1818
use ApiPlatform\Core\Exception\RuntimeException;
1919
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
20+
use ApiPlatform\Exception\OperationNotFoundException;
2021
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
2122
use Doctrine\ODM\MongoDB\Aggregation\Builder;
2223
use Doctrine\ODM\MongoDB\DocumentManager;
@@ -122,7 +123,13 @@ public function getResult(Builder $aggregationBuilder, string $resourceClass, st
122123
throw new RuntimeException(sprintf('The manager for "%s" must be an instance of "%s".', $resourceClass, DocumentManager::class));
123124
}
124125

125-
$attribute = $this->resourceMetadataFactory->create($resourceClass)->getOperation($operationName)->getExtraProperties()['doctrine_mongodb'] ?? [];
126+
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
127+
try {
128+
$operation = $context['operation'] ?? (isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName));
129+
$attribute = $operation->getExtraProperties()['doctrine_mongodb'] ?? [];
130+
} catch (OperationNotFoundException $e) {
131+
$attribute = $resourceMetadata->getOperation(null, true)->getExtraProperties()['doctrine_mongodb'] ?? [];
132+
}
126133
$executeOptions = $attribute['execute_options'] ?? [];
127134

128135
return new Paginator($aggregationBuilder->execute($executeOptions), $manager->getUnitOfWork(), $resourceClass, $aggregationBuilder->getPipeline());

src/Core/Bridge/Doctrine/MongoDbOdm/SubresourceDataProvider.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2626
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
2727
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
28+
use ApiPlatform\Exception\OperationNotFoundException;
2829
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
2930
use Doctrine\ODM\MongoDB\Aggregation\Builder;
3031
use Doctrine\ODM\MongoDB\DocumentManager;
@@ -85,11 +86,23 @@ public function getSubresource(string $resourceClass, array $identifiers, array
8586
throw new RuntimeException(sprintf('The repository for "%s" must be an instance of "%s".', $resourceClass, DocumentRepository::class));
8687
}
8788

89+
if (isset($context['identifiers'], $context['operation']) && !isset($context['property'])) {
90+
$context['property'] = $context['operation']->getExtraProperties()['legacy_subresource_property'] ?? null;
91+
$context['collection'] = $context['operation']->isCollection();
92+
}
93+
8894
if (!isset($context['identifiers'], $context['property'])) {
8995
throw new ResourceClassNotSupportedException('The given resource class is not a subresource.');
9096
}
9197

92-
$attribute = $this->resourceMetadataFactory->create($resourceClass)->getOperation($operationName)->getExtraProperties()['doctrine_mongodb'] ?? [];
98+
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
99+
try {
100+
$operation = $context['operation'] ?? (isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName));
101+
$attribute = $operation->getExtraProperties()['doctrine_mongodb'] ?? [];
102+
} catch (OperationNotFoundException $e) {
103+
$attribute = $resourceMetadata->getOperation()->getExtraProperties()['doctrine_mongodb'] ?? [];
104+
}
105+
93106
$executeOptions = $attribute['execute_options'] ?? [];
94107

95108
$aggregationBuilder = $this->buildAggregation($identifiers, $context, $executeOptions, $repository->createAggregationBuilder(), \count($context['identifiers']));

src/Core/Bridge/Doctrine/Orm/Extension/FilterExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
6969
$resourceFilters = $resourceMetadata->getCollectionOperationAttribute($operationName, 'filters', [], true);
7070
} else {
7171
try {
72-
$operation = isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName);
72+
$operation = $context['operation'] ?? (isset($context['graphql_operation_name']) ? $resourceMetadata->getGraphQlOperation($operationName) : $resourceMetadata->getOperation($operationName));
7373
$resourceFilters = $operation->getFilters();
7474
} catch (OperationNotFoundException $e) {
7575
// In some cases the operation may not exist

0 commit comments

Comments
 (0)