Completed
Push — develop ( b5dddc...8dd5aa )
by Freddie
04:50
created

SheetProcessUseCase   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 159
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 74
c 3
b 0
f 0
dl 0
loc 159
ccs 6
cts 6
cp 1
rs 10
wmc 18

16 Methods

Rating   Name   Duplication   Size   Complexity  
A execute() 0 52 3
A createGateway() 0 4 1
A createTranslate() 0 4 1
A createResponses() 0 4 1
A createController() 0 4 1
A createRepository() 0 4 1
A createConstraint() 0 4 1
A createRequests() 0 4 1
A createFactory() 0 4 1
A createEntity() 0 4 1
A createJavascript() 0 4 1
A createConcreteGateway() 0 4 1
A createFormType() 0 4 1
A createCommands() 0 4 1
A createUseCases() 0 4 1
A createTemplates() 0 4 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\CreateCommandFileRequest;
13
use FlexPHP\Generator\Domain\Messages\Requests\CreateConcreteGatewayFileRequest;
14
use FlexPHP\Generator\Domain\Messages\Requests\CreateConstraintFileRequest;
15
use FlexPHP\Generator\Domain\Messages\Requests\CreateControllerFileRequest;
16
use FlexPHP\Generator\Domain\Messages\Requests\CreateEntityFileRequest;
17
use FlexPHP\Generator\Domain\Messages\Requests\CreateFactoryFileRequest;
18
use FlexPHP\Generator\Domain\Messages\Requests\CreateFormTypeFileRequest;
19
use FlexPHP\Generator\Domain\Messages\Requests\CreateGatewayFileRequest;
20
use FlexPHP\Generator\Domain\Messages\Requests\CreateJavascriptFileRequest;
21
use FlexPHP\Generator\Domain\Messages\Requests\CreateRepositoryFileRequest;
22
use FlexPHP\Generator\Domain\Messages\Requests\CreateRequestFileRequest;
23 4
use FlexPHP\Generator\Domain\Messages\Requests\CreateResponseFileRequest;
24
use FlexPHP\Generator\Domain\Messages\Requests\CreateTemplateFileRequest;
25 4
use FlexPHP\Generator\Domain\Messages\Requests\CreateTranslateFileRequest;
26
use FlexPHP\Generator\Domain\Messages\Requests\CreateUseCaseFileRequest;
27 3
use FlexPHP\Generator\Domain\Messages\Requests\SheetProcessRequest;
28 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateCommandFileResponse;
29 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateConcreteGatewayFileResponse as ConcreteGatewayFileResponse;
30
use FlexPHP\Generator\Domain\Messages\Responses\CreateConstraintFileResponse;
31 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateControllerFileResponse;
32
use FlexPHP\Generator\Domain\Messages\Responses\CreateEntityFileResponse;
33 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateFactoryFileResponse;
34 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateFormTypeFileResponse;
35
use FlexPHP\Generator\Domain\Messages\Responses\CreateGatewayFileResponse;
36
use FlexPHP\Generator\Domain\Messages\Responses\CreateJavascriptFileResponse;
37 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateRepositoryFileResponse;
38 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateRequestFileResponse;
39
use FlexPHP\Generator\Domain\Messages\Responses\CreateResponseFileResponse;
40 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateTemplateFileResponse;
41 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateTranslateFileResponse;
42 3
use FlexPHP\Generator\Domain\Messages\Responses\CreateUseCaseFileResponse;
43
use FlexPHP\Generator\Domain\Messages\Responses\SheetProcessResponse;
44
use FlexPHP\Schema\Schema;
45
use FlexPHP\Schema\SchemaInterface;
46 3
47
final class SheetProcessUseCase
48 3
{
49 3
    public function execute(SheetProcessRequest $request): SheetProcessResponse
50 3
    {
51
        $name = $request->name;
52
        $schema = Schema::fromFile($request->path);
53
        $actions = [
54
            'index',
55
            'create',
56
            'read',
57
            'update',
58
            'delete',
59 3
        ];
60
61 3
        if ($name === 'Users') {
62 3
            $actions = \array_merge($actions, ['login']);
63
        }
64
65
        $controller = $this->createController($schema, $actions);
66
        $entity = $this->createEntity($schema);
67
        $gateway = $this->createGateway($schema, $actions);
68
        $concreteGateway = $this->createConcreteGateway($schema, $actions);
69
        $factory = $this->createFactory($schema);
70
        $repository = $this->createRepository($schema, $actions);
71
        $constraint = $this->createConstraint($schema);
72
        $translate = $this->createTranslate($schema);
73
        $formType = $this->createFormType($schema);
74
        $requests = $this->createRequests($schema, $actions);
75
        $responses = $this->createResponses($schema, $actions);
76
        $useCases = $this->createUseCases($schema, $actions);
77
        $commands = $this->createCommands($schema, $actions);
78
        $templates = $this->createTemplates($schema);
79
        $javascript = null;
80
81
        if (!empty($schema->fkRelations())) {
82
            $javascript = $this->createJavascript($schema);
83
        }
84
85
        return new SheetProcessResponse([
86
            'controller' => $controller->file,
87
            'entity' => $entity->file,
88
            'gateway' => $gateway->file,
89
            'concreteGateway' => $concreteGateway->file,
90
            'factory' => $factory->file,
91
            'repository' => $repository->file,
92
            'constraint' => $constraint->file,
93
            'translate' => $translate->file,
94
            'formType' => $formType->file,
95
            'requests' => $requests->files,
96
            'responses' => $responses->files,
97
            'useCases' => $useCases->files,
98
            'commands' => $commands->files,
99
            'templates' => $templates->files,
100
            'javascript' => $javascript->file ?? null,
101
        ]);
102
    }
103
104
    private function createController(SchemaInterface $schema, array $actions): CreateControllerFileResponse
105
    {
106
        return (new CreateControllerFileUseCase())->execute(
107
            new CreateControllerFileRequest($schema, $actions)
108
        );
109
    }
110
111
    private function createConstraint(SchemaInterface $schema): CreateConstraintFileResponse
112
    {
113
        return (new CreateConstraintFileUseCase())->execute(
114
            new CreateConstraintFileRequest($schema)
115
        );
116
    }
117
118
    private function createTranslate(SchemaInterface $schema): CreateTranslateFileResponse
119
    {
120
        return (new CreateTranslateFileUseCase())->execute(
121
            new CreateTranslateFileRequest($schema)
122
        );
123
    }
124
125
    private function createFormType(SchemaInterface $schema): CreateFormTypeFileResponse
126
    {
127
        return (new CreateFormTypeFileUseCase())->execute(
128
            new CreateFormTypeFileRequest($schema)
129
        );
130
    }
131
132
    private function createEntity(SchemaInterface $schema): CreateEntityFileResponse
133
    {
134
        return (new CreateEntityFileUseCase())->execute(
135
            new CreateEntityFileRequest($schema)
136
        );
137
    }
138
139
    private function createGateway(SchemaInterface $schema, array $actions): CreateGatewayFileResponse
140
    {
141
        return (new CreateGatewayFileUseCase())->execute(
142
            new CreateGatewayFileRequest($schema, $actions)
143
        );
144
    }
145
146
    private function createConcreteGateway(SchemaInterface $schema, array $actions): ConcreteGatewayFileResponse
147
    {
148
        return (new CreateConcreteGatewayFileUseCase())->execute(
149
            new CreateConcreteGatewayFileRequest($schema, 'MySQL', $actions)
150
        );
151
    }
152
153
    private function createFactory(SchemaInterface $schema): CreateFactoryFileResponse
154
    {
155
        return (new CreateFactoryFileUseCase())->execute(
156
            new CreateFactoryFileRequest($schema)
157
        );
158
    }
159
160
    private function createRepository(SchemaInterface $schema, array $actions): CreateRepositoryFileResponse
161
    {
162
        return (new CreateRepositoryFileUseCase())->execute(
163
            new CreateRepositoryFileRequest($schema, $actions)
164
        );
165
    }
166
167
    private function createUseCases(SchemaInterface $schema, array $actions): CreateUseCaseFileResponse
168
    {
169
        return (new CreateUseCaseFileUseCase())->execute(
170
            new CreateUseCaseFileRequest($schema, $actions)
171
        );
172
    }
173
174
    private function createRequests(SchemaInterface $schema, array $actions): CreateRequestFileResponse
175
    {
176
        return (new CreateRequestFileUseCase())->execute(
177
            new CreateRequestFileRequest($schema, $actions)
178
        );
179
    }
180
181
    private function createResponses(SchemaInterface $schema, array $actions): CreateResponseFileResponse
182
    {
183
        return (new CreateResponseFileUseCase())->execute(
184
            new CreateResponseFileRequest($schema, $actions)
185
        );
186
    }
187
188
    private function createCommands(SchemaInterface $schema, array $actions): CreateCommandFileResponse
189
    {
190
        return (new CreateCommandFileUseCase())->execute(
191
            new CreateCommandFileRequest($schema, $actions)
192
        );
193
    }
194
195
    private function createTemplates(SchemaInterface $schema): CreateTemplateFileResponse
196
    {
197
        return (new CreateTemplateFileUseCase())->execute(
198
            new CreateTemplateFileRequest($schema)
199
        );
200
    }
201
202
    private function createJavascript(SchemaInterface $schema): CreateJavascriptFileResponse
203
    {
204
        return (new CreateJavascriptFileUseCase())->execute(
205
            new CreateJavascriptFileRequest($schema)
206
        );
207
    }
208
}
209