Test Setup Failed
Push — develop ( 17b215...d74e9d )
by Freddie
13:13
created

CreateControllerFileUseCase   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 19
c 0
b 0
f 0
dl 0
loc 36
rs 10
wmc 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A execute() 0 25 2
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\Messages\Requests\CreateControllerFileRequest;
18
use FlexPHP\Generator\Domain\Messages\Responses\CreateControllerFileResponse;
19
use FlexPHP\Generator\Domain\Traits\InflectorTrait;
20
use FlexPHP\Generator\Domain\Writers\PhpWriter;
21
use FlexPHP\UseCases\UseCase;
22
23
final class CreateControllerFileUseCase extends UseCase
24
{
25
    use InflectorTrait;
26
27
    /**
28
     * Create controller file based in actions
29
     *
30
     * @param CreateControllerFileRequest $request
31
     *
32
     * @return CreateControllerFileResponse
33
     */
34
    public function execute($request)
35
    {
36
        $this->throwExceptionIfRequestNotValid(__METHOD__, CreateControllerFileRequest::class, $request);
37
38
        $entity = $request->entity;
39
        $actions = $request->actions;
40
        $actionBuilders = [];
41
42
        foreach ($actions as $action) {
43
            $actionBuilders[$action] = (new ActionBuilder(
44
                $entity,
45
                $action,
46
                (new RequestMessageBuilder($entity, $action))->build(),
47
                (new UseCaseBuilder($entity, $action))->build(),
48
                (new ResponseMessageBuilder($entity, $action))->build()
49
            ))->build();
50
        }
51
52
        $controller = new ControllerBuilder($entity, $actionBuilders);
53
        $filename = $this->getSingularize($entity) . 'Controller';
54
        $path = \sprintf('%1$s/src/Controllers', $request->outputFolder);
55
56
        $writer = new PhpWriter($controller->build(), $filename, $path);
57
58
        return new CreateControllerFileResponse($writer->save());
59
    }
60
}
61