Skip to content

Commit

Permalink
Merge 54ca436 into 8b02b2b
Browse files Browse the repository at this point in the history
  • Loading branch information
soyuka committed Mar 15, 2021
2 parents 8b02b2b + 54ca436 commit d36592d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 4 deletions.
41 changes: 38 additions & 3 deletions src/OpenApi/Factory/OpenApiFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,19 +175,40 @@ private function collectPaths(ResourceMetadata $resourceMetadata, string $resour
// Set up parameters
if (OperationType::ITEM === $operationType) {
foreach ($identifiers as $parameterName => $identifier) {
$parameters[] = new Model\Parameter(\is_string($parameterName) ? $parameterName : $identifier, 'path', 'Resource identifier', true, false, false, ['type' => 'string']);
$parameterName = \is_string($parameterName) ? $parameterName : $identifier;
if ($this->hasParameter($parameterName, $parameters)) {
continue;
}

$parameters[] = new Model\Parameter($parameterName, 'path', 'Resource identifier', true, false, false, ['type' => 'string']);
}
$links[$operationId] = $this->getLink($resourceClass, $operationId, $path);
} elseif (OperationType::COLLECTION === $operationType && 'GET' === $method) {
$parameters = array_merge($parameters, $this->getPaginationParameters($resourceMetadata, $operationName), $this->getFiltersParameters($resourceMetadata, $operationName, $resourceClass));
foreach (array_merge($this->getPaginationParameters($resourceMetadata, $operationName), $this->getFiltersParameters($resourceMetadata, $operationName, $resourceClass)) as $parameter) {
if ($this->hasParameter($parameter->getName(), $parameters)) {
continue;
}

$parameters[] = $parameter;
}
} elseif (OperationType::SUBRESOURCE === $operationType) {
foreach ($operation['identifiers'] as $parameterName => [$class, $property]) {
if ($this->hasParameter($parameterName, $parameters)) {
continue;
}

$parameters[] = new Model\Parameter($parameterName, 'path', $this->resourceMetadataFactory->create($class)->getShortName().' identifier', true, false, false, ['type' => 'string']);
}

if ($operation['collection']) {
$subresourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
$parameters = array_merge($parameters, $this->getPaginationParameters($resourceMetadata, $operationName), $this->getFiltersParameters($subresourceMetadata, $operationName, $resourceClass));
foreach (array_merge($this->getPaginationParameters($resourceMetadata, $operationName), $this->getFiltersParameters($subresourceMetadata, $operationName, $resourceClass)) as $parameter) {
if ($this->hasParameter($parameter->getName(), $parameters)) {
continue;
}

$parameters[] = $parameter;
}
}
}

Expand Down Expand Up @@ -486,4 +507,18 @@ private function getSecuritySchemes(): array

return $securitySchemes;
}

/**
* @var Model\Parameter[]
*/
private function hasParameter(string $parameterKey, array $parameters = []): bool
{
foreach ($parameters as $parameter) {
if ($parameterKey === $parameter->getName()) {
return true;
}
}

return false;
}
}
3 changes: 2 additions & 1 deletion tests/OpenApi/Factory/OpenApiFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public function testInvoke(): void
'description' => 'Custom description',
'parameters' => [
['description' => 'Test parameter', 'name' => 'param', 'in' => 'path', 'type' => 'string', 'required' => true, 'default' => 'BOTH'],
['description' => 'Replace parameter', 'name' => 'id', 'in' => 'path', 'type' => 'string', 'required' => true, 'schema' => ['type' => 'string', 'format' => 'uuid']],
],
'tags' => ['Dummy', 'Profile'],
'responses' => [
Expand Down Expand Up @@ -434,7 +435,7 @@ public function testInvoke(): void
'Dummy',
'Custom description',
null,
[new Model\Parameter('param', 'path', 'Test parameter', true), new Model\Parameter('id', 'path', 'Resource identifier', true, false, false, ['type' => 'string'])],
[new Model\Parameter('param', 'path', 'Test parameter', true), new Model\Parameter('id', 'path', 'Replace parameter', true, false, false, ['type' => 'string', 'format' => 'uuid'])],
new Model\RequestBody('Custom request body', new \ArrayObject([
'multipart/form-data' => [
'schema' => [
Expand Down

0 comments on commit d36592d

Please sign in to comment.