Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ApieCallTypeResolver
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2namespace Apie\Graphql\TypeResolvers;
3
4use Apie\Core\Actions\ActionInterface;
5use Apie\Core\Actions\ApieFacadeInterface;
6use Apie\Core\BoundedContext\BoundedContextId;
7use Apie\Core\Context\ApieContext;
8use Apie\Core\ContextConstants;
9use ReflectionClass;
10use ReflectionMethod;
11
12class ApieCallTypeResolver
13{
14    /**
15     * @param class-string<ActionInterface> $actionClass
16     */
17    public function __construct(
18        private readonly string $actionClass,
19        private readonly ?BoundedContextId $boundedContextId = null,
20        private readonly ?ReflectionClass $resourceClass = null,
21        private readonly ?ReflectionMethod $method = null,
22        private readonly bool $setResourceId = false,
23    ) {
24    }
25    public function __invoke(ApieContext $context, array $args): array | bool
26    {
27        $contextVariables = $this->actionClass::getRouteAttributes($this->resourceClass, $this->method);
28        $contextVariables[ContextConstants::APIE_ACTION] = $this->actionClass;
29        $contextVariables[ContextConstants::RAW_CONTENTS] = $args['input'] ?? [];
30        if ($this->boundedContextId) {
31            $contextVariables[ContextConstants::BOUNDED_CONTEXT_ID] = $this->boundedContextId->toNative();
32            $contextVariables[BoundedContextId::class] = $this->boundedContextId;
33        }
34        if ($this->setResourceId && isset($args['id'])) {
35            $contextVariables[ContextConstants::RESOURCE_ID] = $args['id'];
36        }
37        $context = $context->withMultipleContext($contextVariables);
38        $facade = $context->getContext(ApieFacadeInterface::class);
39        $action = new $this->actionClass($facade);
40        $response = $action->__invoke($context, $args['input'] ?? []);
41
42        return json_decode(json_encode($response->getResultAsNativeData()), true);
43    }
44}