Skip to content

Commit 3c2d2be

Browse files
author
Thibaut Cholley
committed
wip
1 parent 61c6dee commit 3c2d2be

14 files changed

Lines changed: 37 additions & 31 deletions

File tree

src/GraphQl/Serializer/SerializerContextBuilder.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,8 @@ public function create(?string $resourceClass, Operation $operation, array $reso
4040
}
4141

4242
$context['operation'] = $operation;
43-
if ($operation->getInput()) {
44-
$context['input'] = $operation->getInput();
45-
}
46-
if ($operation->getOutput()) {
47-
$context['output'] = $operation->getOutput();
48-
}
43+
$context['input'] =['class' => $operation->getInputClass()];
44+
$context['output'] = ['class' => $operation->getOutputClass()];
4945
$context = $normalization ? array_merge($operation->getNormalizationContext() ?? [], $context) : array_merge($operation->getDenormalizationContext() ?? [], $context);
5046

5147
if ($normalization) {

src/GraphQl/State/Provider/ResolverProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
4444
$item = $queryResolver($item, $context);
4545
if (!$operation instanceof CollectionOperationInterface) {
4646
// The item retrieved can be of another type when using an identifier (see Relay Nodes at query.feature:23)
47-
$this->getResourceClass($item, $operation->getOutput()['class'] ?? $operation->getClass(), \sprintf('Custom query resolver "%s"', $queryResolverId).' has to return an item of class %s but returned an item of class %s.');
47+
$this->getResourceClass($item, $operation->getOutputClass(), \sprintf('Custom query resolver "%s"', $queryResolverId).' has to return an item of class %s but returned an item of class %s.');
4848
}
4949

5050
return $item;

src/GraphQl/Type/TypeBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,8 @@ private function getResourceObjectTypeConfiguration(string $shortName, ResourceM
316316
$depth = $context['depth'] ?? 0;
317317
$wrapped = $context['wrapped'] ?? false;
318318

319-
$ioMetadata = $input ? $operation->getInput() : $operation->getOutput();
320-
if (null !== $ioMetadata && \array_key_exists('class', $ioMetadata) && null !== $ioMetadata['class']) {
319+
$ioMetadata = $input ? $operation->getInputClass() : $operation->getOutputClass();
320+
if (null !== $ioMetadata ) {
321321
$resourceClass = $ioMetadata['class'];
322322
}
323323

src/Hydra/Serializer/DocumentationNormalizer.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,11 @@ private function getHydraProperties(string $resourceClass, ApiResource $resource
216216
continue;
217217
}
218218

219-
$inputMetadata = $operation->getInput();
220-
if (null !== $inputClass = $inputMetadata['class'] ?? null) {
219+
if (null !== $inputClass = $operation->getInputClass()) {
221220
$classes[$inputClass] = true;
222221
}
223222

224-
$outputMetadata = $operation->getOutput();
225-
if (null !== $outputClass = $outputMetadata['class'] ?? null) {
223+
if (null !== $outputClass = $operation->getOutputClass()) {
226224
$classes[$outputClass] = true;
227225
}
228226
}
@@ -288,11 +286,9 @@ private function getHydraOperation(HttpOperation $operation, string $prefixedSho
288286
}
289287

290288
$shortName = $operation->getShortName();
291-
$inputMetadata = $operation->getInput() ?? [];
292-
$outputMetadata = $operation->getOutput() ?? [];
293289

294-
$inputClass = \array_key_exists('class', $inputMetadata) ? $inputMetadata['class'] : false;
295-
$outputClass = \array_key_exists('class', $outputMetadata) ? $outputMetadata['class'] : false;
290+
$inputClass = $operation->getInputClass();
291+
$outputClass = $operation->getOutputClass();
296292

297293
if ('GET' === $method && $operation instanceof CollectionOperationInterface) {
298294
$hydraOperation += [

src/Mcp/Capability/Registry/Loader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ public function load(RegistryInterface $registry): void
4949
foreach ($metadata as $resource) {
5050
foreach ($resource->getMcp() ?? [] as $mcp) {
5151
if ($mcp instanceof McpTool) {
52-
$inputClass = $mcp->getInput()['class'] ?? $mcp->getClass();
52+
$inputClass = $mcp->getInputClass();
5353
$inputFormat = array_key_first($mcp->getInputFormats() ?? ['json' => ['application/json']]);
5454
$inputSchema = $this->schemaFactory->buildSchema($inputClass, $inputFormat, Schema::TYPE_INPUT, $mcp, null, [SchemaFactory::FORCE_SUBSCHEMA => true]);
5555

5656
$outputSchema = null;
5757
if (false !== $mcp->getStructuredContent()) {
58-
$outputClass = $mcp->getOutput()['class'] ?? $mcp->getClass();
58+
$outputClass = $mcp->getOutputClass();
5959
$outputFormat = array_key_first($mcp->getOutputFormats() ?? ['json' => ['application/json']]);
6060
$outputSchema = $this->schemaFactory->buildSchema($outputClass, $outputFormat, Schema::TYPE_OUTPUT, $mcp, null, [SchemaFactory::FORCE_SUBSCHEMA => true])->getArrayCopy();
6161
}

src/Metadata/Metadata.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,14 @@ public function getInput(): mixed
277277
return $this->input;
278278
}
279279

280+
/**
281+
* @return class-string|null
282+
*/
283+
public function getInputClass(): ?string
284+
{
285+
return isset($this->input['class']) ? $this->input['class'] : $this->getClass();
286+
}
287+
280288
public function withInput(mixed $input): static
281289
{
282290
$self = clone $this;
@@ -290,6 +298,14 @@ public function getOutput(): mixed
290298
return $this->output;
291299
}
292300

301+
/**
302+
* @return class-string|null
303+
*/
304+
public function getOutputClass(): ?string
305+
{
306+
return isset($this->output['class']) ? $this->inpuoutputt['class'] : $this->getClass();
307+
}
308+
293309
public function withOutput(mixed $output): static
294310
{
295311
$self = clone $this;

src/Metadata/Resource/Factory/InputOutputResourceMetadataCollectionFactory.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ private function getTransformedOperations(Operations|array $operations, ApiResou
7575

7676
if (
7777
$operation instanceof HttpOperation
78-
&& $operation->getOutput()
79-
&& \array_key_exists('class', $operation->getOutput())
80-
&& null === $operation->getOutput()['class']
78+
&& null === $operation->getOutputClass()
8179
&& null === $operation->getStatus()
8280
) {
8381
$operation = $operation->withStatus(204);

src/Metadata/Resource/Factory/ObjectMapperMetadataCollectionFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ public function create(string $resourceClass): ResourceMetadataCollection
5757
$entityClass = $options->getModelClass();
5858
}
5959

60-
$class = $operation->getInput()['class'] ?? $operation->getClass();
61-
$outputClass = $operation->getOutput()['class'] ?? null;
60+
$class = $operation->getInputClass();
61+
$outputClass = $operation->getOutputClass();
6262
$entityMap = null;
6363

6464
// Look for Mapping metadata

src/OpenApi/Factory/OpenApiFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ private function collectPaths(ApiResource $resource, ResourceMetadataCollection
501501
*/
502502
private function buildOpenApiResponse(array $existingResponses, int|string $status, string $description, Operation $openapiOperation, ?HttpOperation $operation = null, ?array $responseMimeTypes = null, ?array $operationOutputSchemas = null, ?ResourceMetadataCollection $resourceMetadataCollection = null, bool $isErrorResponse = false): Operation
503503
{
504-
$noOutput = !$isErrorResponse && \is_array($operation?->getOutput()) && null === $operation->getOutput()['class'];
504+
$noOutput = !$isErrorResponse && null === $operation->getOutputClass();
505505

506506
$response = $existingResponses[$status] ?? new Response($description);
507507
if (null === $response->getDescription()) {

src/Serializer/SerializerContextBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ public function createFromRequest(Request $request, bool $normalization, ?array
6464
$context['iri_only'] ??= false;
6565
$context['request_uri'] = $request->getRequestUri();
6666
$context['uri'] = $request->getUri();
67-
$context['input'] = $operation->getInput();
68-
$context['output'] = $operation->getOutput();
67+
$context['input'] = ['class' => $operation->getInputClass()];
68+
$context['output'] = ['class' => $operation->getOutputClass()];
6969

7070
// Special case as this is usually handled by our OperationContextTrait, here we want to force the IRI in the response
7171
if (!$operation instanceof CollectionOperationInterface && method_exists($operation, 'getItemUriTemplate') && $operation->getItemUriTemplate()) {

0 commit comments

Comments
 (0)