Completed
Push — develop ( e7cba6...164e03 )
by Freddie
13:34
created

SheetProcessUseCase::createRepository()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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