Test Setup Failed
Push — develop ( c73499...361b2b )
by Freddie
03:04
created

SheetProcessUseCase::execute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 1

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
eloc 22
nc 1
nop 1
dl 0
loc 28
rs 9.568
c 3
b 0
f 0
ccs 11
cts 11
cp 1
crap 1
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\Messages\Requests\CreateConstraintFileRequest;
13
use FlexPHP\Generator\Domain\Messages\Requests\CreateControllerFileRequest;
14
use FlexPHP\Generator\Domain\Messages\Requests\CreateEntityFileRequest;
15
use FlexPHP\Generator\Domain\Messages\Requests\CreateRequestFileRequest;
16
use FlexPHP\Generator\Domain\Messages\Requests\CreateResponseFileRequest;
17
use FlexPHP\Generator\Domain\Messages\Requests\CreateUseCaseFileRequest;
18
use FlexPHP\Generator\Domain\Messages\Requests\SheetProcessRequest;
19
use FlexPHP\Generator\Domain\Messages\Responses\CreateConstraintFileResponse;
20
use FlexPHP\Generator\Domain\Messages\Responses\CreateControllerFileResponse;
21
use FlexPHP\Generator\Domain\Messages\Responses\CreateEntityFileResponse;
22
use FlexPHP\Generator\Domain\Messages\Responses\CreateRequestFileResponse;
23 4
use FlexPHP\Generator\Domain\Messages\Responses\CreateResponseFileResponse;
24
use FlexPHP\Generator\Domain\Messages\Responses\CreateUseCaseFileResponse;
25 4
use FlexPHP\Generator\Domain\Messages\Responses\SheetProcessResponse;
26
use FlexPHP\Schema\Schema;
27 3
use FlexPHP\UseCases\UseCase;
28 3
29 3
final class SheetProcessUseCase extends UseCase
30
{
31 3
    /**
32
     * Process sheet
33 3
     *
34 3
     * @param SheetProcessRequest $request
35
     *
36
     * @return SheetProcessResponse
37 3
     */
38 3
    public function execute($request)
39
    {
40 3
        $this->throwExceptionIfRequestNotValid(__METHOD__, SheetProcessRequest::class, $request);
41 3
42 3
        $name = $request->name;
43
        $attributes = Schema::fromFile($request->path)->attributes();
44
        $actions = [
45
            'index',
46 3
            'create',
47
            'read',
48 3
            'update',
49 3
            'delete',
50 3
        ];
51
52
        $controller = $this->createController($name, $actions);
53
        $entity = $this->createEntity($name, $attributes);
54
        $constraint = $this->createConstraint($name, $attributes);
55
        $requests = $this->createRequests($name, $actions, $attributes);
56
        $responses = $this->createResponses($name, $actions);
57
        $useCases = $this->createUseCases($name, $actions, $attributes);
58
59 3
        return new SheetProcessResponse([
60
            'controller' => $controller->file,
61 3
            'entity' => $entity->file,
62 3
            'constraint' => $constraint->file,
63
            'requests' => $requests->files,
64
            'responses' => $responses->files,
65
            'useCases' => $useCases->files,
66
        ]);
67
    }
68
69
    private function createController(string $name, array $actions): CreateControllerFileResponse
70
    {
71
        return (new CreateControllerFileUseCase())->execute(
72
            new CreateControllerFileRequest($name, $actions)
73
        );
74
    }
75
76
    private function createConstraint(string $name, array $attributes): CreateConstraintFileResponse
77
    {
78
        return (new CreateConstraintFileUseCase())->execute(
79
            new CreateConstraintFileRequest($name, $attributes)
80
        );
81
    }
82
83
    private function createEntity(string $name, array $attributes): CreateEntityFileResponse
84
    {
85
        return (new CreateEntityFileUseCase())->execute(
86
            new CreateEntityFileRequest($name, $attributes)
87
        );
88
    }
89
90
    private function createUseCases(string $name, array $actions, array $attributes): CreateUseCaseFileResponse
91
    {
92
        return (new CreateUseCaseFileUseCase())->execute(
93
            new CreateUseCaseFileRequest($name, $actions, $attributes)
94
        );
95
    }
96
97
    private function createRequests(string $name, array $actions, array $attributes): CreateRequestFileResponse
98
    {
99
        return (new CreateRequestFileUseCase())->execute(
100
            new CreateRequestFileRequest($name, $attributes, $actions)
101
        );
102
    }
103
104
    private function createResponses(string $name, array $actions): CreateResponseFileResponse
105
    {
106
        return (new CreateResponseFileUseCase())->execute(
107
            new CreateResponseFileRequest($name, $actions)
108
        );
109
    }
110
}
111