CreateControllerFileUseCase::execute()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 16
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 23
rs 9.7333
1
<?php declare(strict_types=1);
2
/*
3
 * This file is part of FlexPHP.
4
 *
5
 * (c) Freddie Gar <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
namespace FlexPHP\Generator\Domain\UseCases;
11
12
use FlexPHP\Generator\Domain\Builders\Controller\ActionBuilder;
13
use FlexPHP\Generator\Domain\Builders\Controller\ControllerBuilder;
14
use FlexPHP\Generator\Domain\Builders\Controller\RequestMessageBuilder;
15
use FlexPHP\Generator\Domain\Builders\Controller\ResponseMessageBuilder;
16
use FlexPHP\Generator\Domain\Builders\Controller\UseCaseBuilder;
17
use FlexPHP\Generator\Domain\Builders\Inflector;
18
use FlexPHP\Generator\Domain\Messages\Requests\CreateControllerFileRequest;
19
use FlexPHP\Generator\Domain\Messages\Responses\CreateControllerFileResponse;
20
use FlexPHP\Generator\Domain\Writers\PhpWriter;
21
22
final class CreateControllerFileUseCase
23
{
24
    public function execute(CreateControllerFileRequest $request): CreateControllerFileResponse
25
    {
26
        $inflector = new Inflector();
27
        $entity = $request->schema->name();
28
        $actionBuilders = [];
29
30
        foreach ($request->actions as $action) {
31
            $actionBuilders[$action] = (new ActionBuilder(
32
                $request->schema,
33
                $action,
34
                (new RequestMessageBuilder($request->schema, $action))->build(),
35
                (new UseCaseBuilder($request->schema, $action))->build(),
36
                (new ResponseMessageBuilder($request->schema, $action))->build()
37
            ))->build();
38
        }
39
40
        $controller = new ControllerBuilder($request->schema, $actionBuilders);
41
        $filename = $inflector->entity($entity) . 'Controller';
42
        $path = \sprintf('%1$s/../../tmp/skeleton/src/Controller', __DIR__);
43
44
        $writer = new PhpWriter($controller->build(), $filename, $path);
45
46
        return new CreateControllerFileResponse($writer->save());
47
    }
48
}
49