Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ResourceActionFactory
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
3 / 3
9
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
 createResourceActionForOverview
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
4
 createResourceActionForDetail
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2namespace Apie\HtmlBuilders\Factories;
3
4use Apie\Common\ActionDefinitionProvider;
5use Apie\Core\BoundedContext\BoundedContext;
6use Apie\Core\Context\ApieContext;
7use Apie\Core\Entities\EntityInterface;
8use Apie\HtmlBuilders\Lists\ActionList;
9use Apie\HtmlBuilders\ResourceActions\CreateResourceAction;
10use Apie\HtmlBuilders\ResourceActions\GlobalMethodResourceAction;
11use Apie\HtmlBuilders\ResourceActions\ModifyResourceAction;
12use Apie\HtmlBuilders\ResourceActions\RemoveResourceAction;
13use Apie\HtmlBuilders\ResourceActions\RunResourceMethodResourceAction;
14use ReflectionClass;
15
16final class ResourceActionFactory
17{
18    private const OVERVIEW_CLASSES = [
19        CreateResourceAction::class,
20        GlobalMethodResourceAction::class,
21        RunResourceMethodResourceAction::class,
22    ];
23
24    private const DETAIL_CLASSES = [
25        ModifyResourceAction::class,
26        RunResourceMethodResourceAction::class,
27        RemoveResourceAction::class,
28    ];
29
30    public function __construct(private readonly ActionDefinitionProvider $actionDefinitionProvider)
31    {
32    }
33
34    /**
35     * @param ReflectionClass<EntityInterface> $class
36     */
37    public function createResourceActionForOverview(ReflectionClass $class, ApieContext $context): ActionList
38    {
39        $resourceActions = [];
40        $boundedContext = $context->getContext(BoundedContext::class);
41        foreach ($this->actionDefinitionProvider->provideActionDefinitions($boundedContext, $context, true) as $actionDefinition) {
42            foreach (self::OVERVIEW_CLASSES as $resourceActionClass) {
43                $resourceAction = $resourceActionClass::createFor($class, $actionDefinition);
44                if ($resourceAction) {
45                    $resourceActions[] = $resourceAction;
46                }
47            }
48        }
49        return new ActionList($resourceActions);
50    }
51
52    /**
53     * @template T of EntityInterface
54     *
55     * @param T $entity
56     * @param ReflectionClass<T> $class
57     */
58    public function createResourceActionForDetail(EntityInterface $entity, ReflectionClass $class, ApieContext $context): ActionList
59    {
60        $resourceActions = [];
61        $boundedContext = $context->getContext(BoundedContext::class);
62        foreach ($this->actionDefinitionProvider->provideActionDefinitions($boundedContext, $context, true) as $actionDefinition) {
63            foreach (self::DETAIL_CLASSES as $resourceActionClass) {
64                $resourceAction = $resourceActionClass::createForEntity($entity, $class, $actionDefinition);
65                if ($resourceAction) {
66                    $resourceActions[] = $resourceAction;
67                }
68            }
69        }
70        return new ActionList($resourceActions);
71    }
72}