TypesFactory   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 54
c 1
b 0
f 0
dl 0
loc 79
ccs 60
cts 60
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 77 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Application\Api;
6
7
use Doctrine\ORM\EntityManager;
8
use GraphQL\Doctrine\Types;
9
use Laminas\ServiceManager\ServiceManager;
10
use Psr\Container\ContainerInterface;
11
12
class TypesFactory
13
{
14 1
    public function __invoke(ContainerInterface $container): Types
15
    {
16 1
        $entityManager = $container->get(EntityManager::class);
17
18 1
        $invokables = [
19 1
            Enum\UserRoleType::class,
20 1
            Enum\MessageTypeType::class,
21 1
            Input\ConfirmRegistrationInputType::class,
22 1
            \Ecodev\Felix\Api\Input\PaginationInputType::class,
23 1
            Input\OrderLineInputType::class,
24 1
            Input\OrderInputType::class,
25 1
            MutationType::class,
26 1
            Output\AllPermissionsType::class,
27 1
            Output\ImportResultType::class,
28 1
            Output\CrudPermissionsListType::class,
29 1
            Output\CrudPermissionsType::class,
30 1
            \Ecodev\Felix\Api\Output\PermissionsType::class,
31 1
            QueryType::class,
32 1
            \Ecodev\Felix\Api\Scalar\ColorType::class,
33 1
            \Ecodev\Felix\Api\Scalar\ChronosType::class,
34 1
            \Ecodev\Felix\Api\Scalar\DateType::class,
35 1
            \Ecodev\Felix\Api\Scalar\CHFType::class,
36 1
            \Ecodev\Felix\Api\Scalar\EURType::class,
37 1
            \Ecodev\Felix\Api\Scalar\EmailType::class,
38 1
            \Ecodev\Felix\Api\Scalar\PasswordType::class,
39 1
            \Ecodev\Felix\Api\Scalar\TokenType::class,
40 1
            \GraphQL\Upload\UploadType::class,
41 1
        ];
42
43 1
        $invokables = array_combine($invokables, $invokables);
44
45 1
        $aliases = [
46 1
            'datetime' => \Ecodev\Felix\Api\Scalar\ChronosType::class,
47 1
            'date' => \Ecodev\Felix\Api\Scalar\DateType::class,
48 1
            'CHF' => \Ecodev\Felix\Api\Scalar\CHFType::class,
49 1
            'EUR' => \Ecodev\Felix\Api\Scalar\EURType::class,
50 1
        ];
51
52 1
        $aliasesWithShortVariant = [
53 1
            \Cake\Chronos\Chronos::class => \Ecodev\Felix\Api\Scalar\ChronosType::class,
54 1
            \Cake\Chronos\ChronosDate::class => \Ecodev\Felix\Api\Scalar\DateType::class,
55 1
            \Psr\Http\Message\UploadedFileInterface::class => \GraphQL\Upload\UploadType::class,
56 1
        ];
57
58
        // Automatically add aliases and their short variants
59 1
        foreach ($aliasesWithShortVariant as $alias => $type) {
60 1
            $parts = explode('\\', $alias);
61 1
            $shortAlias = end($parts);
62
63 1
            $aliases[$alias] = $type;
64 1
            $aliases[$shortAlias] = $type;
65
        }
66
67
        // Automatically add aliases for GraphQL type name from the invokable types
68 1
        foreach ($invokables as $type) {
69 1
            $parts = explode('\\', $type);
70 1
            $alias = preg_replace('~Type$~', '', end($parts));
71 1
            $aliases[$alias] = $type;
72
        }
73
74 1
        $customTypes = new ServiceManager([
75 1
            'invokables' => $invokables,
76 1
            'aliases' => $aliases,
77 1
            'services' => [
78
                //                // This is not quite right because it allow to compare a string with a json array.
79
                //                // TODO: either hide the json_array filter or find a cleaner solution
80 1
                'json' => \GraphQL\Type\Definition\Type::string(),
81 1
            ],
82 1
            'abstract_factories' => [
83 1
                Output\PaginationTypeFactory::class,
84 1
                \Ecodev\Felix\Api\Enum\EnumAbstractFactory::class,
85 1
            ],
86 1
        ]);
87
88 1
        $types = new Types($entityManager, $customTypes);
89
90 1
        return $types;
91
    }
92
}
93