Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
94.12% |
48 / 51 |
|
82.35% |
14 / 17 |
CRAP | |
0.00% |
0 / 1 |
ControllerGen | |
94.12% |
48 / 51 |
|
82.35% |
14 / 17 |
41.34 | |
0.00% |
0 / 1 |
getControllerName | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getControllerAllArgs | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getControllerParentArgs | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getControllerArgs | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 | |||
getFindById | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 | |||
getQuery | |
88.89% |
8 / 9 |
|
0.00% |
0 / 1 |
6.05 | |||
getSearch | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
2 | |||
getPager | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getIndexVars | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getAllVars | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getParentVars | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getCreateVars | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getEditVars | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
getWith | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
2 | |||
getSelects | |
80.00% |
4 / 5 |
|
0.00% |
0 / 1 |
3.07 | |||
getValidations | |
91.67% |
11 / 12 |
|
0.00% |
0 / 1 |
8.04 | |||
getStore | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
7 |
1 | <?php |
2 | |
3 | namespace San\Crud\Generators; |
4 | |
5 | use San\Crud\Utils\NameUtils; |
6 | use San\Crud\Utils\SchemaUtils; |
7 | |
8 | class ControllerGen extends BaseGen { |
9 | |
10 | public function getControllerName() { |
11 | return NameUtils::getControllerName($this->tables); |
12 | } |
13 | |
14 | public function getControllerAllArgs() { |
15 | return $this->getControllerArgs($this->tables); |
16 | } |
17 | |
18 | public function getControllerParentArgs() { |
19 | return $this->getControllerArgs($this->parentTables()); |
20 | } |
21 | |
22 | public function getControllerArgs(array $tables) { |
23 | $value = join(', ', array_map(fn($table) => sprintf('%s $%s', NameUtils::getModelName((array) $table), NameUtils::getVariableName($table)), $tables)); |
24 | return !empty($value) ? "$value," : ""; |
25 | } |
26 | |
27 | public function getFindById() { |
28 | return sprintf('$%s = %s::withTrashed()%s->find($%s_id);', $this->getVarName(), NameUtils::getModelName($this->mainTable()), |
29 | $this->hasUserId() ? "->where('user_id', auth()->id())" : "", NameUtils::getVariableName($this->mainTable())); |
30 | } |
31 | |
32 | public function getQuery() { |
33 | if ($this->hasParentTable()) { |
34 | $code[] = sprintf('$%s = $%s->%s();', $this->getVarNamePlural(), $this->getParentVarName(), $this->mainTable()); |
35 | } else { |
36 | $code[] = sprintf('$%s = %s::query();', $this->getVarNamePlural(), NameUtils::getModelName((array) $this->mainTable())); |
37 | } |
38 | |
39 | foreach (array_slice($this->tables, -2) as $table) { |
40 | if (SchemaUtils::getUserIdField($table)) { |
41 | $code[] = sprintf("\t\t\$%s->where('%s', auth()->id());", $table === $this->mainTable() ? NameUtils::getVariableNamePlural($table) : NameUtils::getVariableName($table), SchemaUtils::getUserIdField($table)); |
42 | } |
43 | } |
44 | |
45 | if ($this->hasSoftDeletes()) { |
46 | $code[] = sprintf("\n\t\tif (!!\$request->trashed) {\n\t\t\t\$%s->withTrashed();\n\t\t}", $this->getVarNamePlural()); |
47 | } |
48 | |
49 | return join("\n", $code); |
50 | } |
51 | |
52 | public function getSearch() { |
53 | return sprintf("if(!empty(\$request->search)) {\n\t\t\t\$%s->where('%s', 'like', '%%' . \$request->search . '%%');\n\t\t}", $this->getVarNamePlural(), SchemaUtils::firstHumanReadableField($this->mainTable(), 'id') ?: 'id'); |
54 | } |
55 | |
56 | public function getPager() { |
57 | return sprintf('$%s = $%s->paginate(10);', $this->getVarNamePlural(), $this->getVarNamePlural()); |
58 | } |
59 | |
60 | public function getIndexVars() { |
61 | return $this->getVars($this->parentTables(), (array) $this->getVarNamePlural()); |
62 | } |
63 | |
64 | public function getAllVars() { |
65 | return $this->getVars($this->tables); |
66 | } |
67 | |
68 | public function getParentVars() { |
69 | return $this->getVars($this->parentTables()); |
70 | } |
71 | |
72 | public function getCreateVars() { |
73 | return $this->getVars($this->parentTables(), (array) array_map(fn($field) => $field['related_table'], (array) $this->getExternallyRelatedFields())); |
74 | } |
75 | |
76 | public function getEditVars() { |
77 | return $this->getVars($this->tables, (array) array_map(fn($field) => $field['related_table'], (array) $this->getExternallyRelatedFields())); |
78 | } |
79 | |
80 | public function getWith() { |
81 | foreach ($this->getExternallyRelatedFields() as $field) { |
82 | $code[] = sprintf('$%s->with(\'%s\');', $this->getVarNamePlural(), $field['relation']); |
83 | } |
84 | |
85 | return join("\n\t\t", $code ?? []); |
86 | } |
87 | |
88 | public function getSelects() { |
89 | foreach ($this->getExternallyRelatedFields() as $field) { |
90 | if (SchemaUtils::getUserIdField($field['related_table'])) { |
91 | $code[] = sprintf("\$%s = \App\Models\%s::where('%s', auth()->id())->get();", NameUtils::getVariableNamePlural($field['related_table']), NameUtils::getModelName($field['related_table']), SchemaUtils::getUserIdField($field['related_table'])); |
92 | } else { |
93 | $code[] = sprintf("\$%s = \App\Models\%s::all();", NameUtils::getVariableNamePlural($field['related_table']), NameUtils::getModelName($field['related_table'])); |
94 | } |
95 | } |
96 | |
97 | return join("\n\t\t", $code ?? []); |
98 | } |
99 | |
100 | public function getValidations(bool $edit) { |
101 | foreach ($this->getFillableFields() as $field) { |
102 | if (preg_match('/boolean|timestamp/', $field['type'])) continue; |
103 | |
104 | if (!$field['nullable']) { |
105 | $validations[$field['id']] = 'required'; |
106 | } |
107 | |
108 | if (!empty($field['unique'])) { |
109 | $validations[$field['id']] .= (!empty($validations[$field['id']]) ? '|' : '') . "unique:{$this->mainTable()},{$field['id']}"; |
110 | if ($edit) { |
111 | $validations[$field['id']] .= ",\${$this->getVarName()}->id"; |
112 | } |
113 | } |
114 | } |
115 | |
116 | if (!empty($validations)) { |
117 | $keyValues = array_map(fn($key, $value) => sprintf('"%s" => "%s"', $key, $value), array_keys($validations), $validations); |
118 | return sprintf("[%s]", join(", ", $keyValues)); |
119 | } else { |
120 | return '[]'; |
121 | } |
122 | } |
123 | |
124 | public function getStore($edit) { |
125 | foreach (SchemaUtils::getTableFields($this->mainTable()) as $field) { |
126 | if ($field['id'] === 'user_id') { |
127 | if (!$edit) $fills[] = sprintf("\$%s->user_id = auth()->id();", $this->getVarName()); |
128 | } else if (in_array($field['related_table'] ?? '', $this->tables)) { |
129 | if (!$edit) $fills[] = sprintf("\$%s->%s = \$%s->id;", $this->getVarName(), $field['id'], NameUtils::getVariableName($field['related_table'])); |
130 | } else { |
131 | $bool = preg_match('/bool/', $field['type']) ? '!!' : ''; |
132 | $fills[] = sprintf("\$%s->%s = %s\$request->%s;", $this->getVarName(), $field['id'], $bool, $field['id']); |
133 | } |
134 | } |
135 | |
136 | return join("\n\t\t", $fills ?? []); |
137 | } |
138 | } |