Skip to content

Commit 874ea88

Browse files
committed
fix: swagger fixes
1 parent 9f91e43 commit 874ea88

File tree

5 files changed

+33
-152
lines changed

5 files changed

+33
-152
lines changed

config/laravel_generator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146

147147
'seeder' => false,
148148

149-
'swagger' => false, // generate swagger for your APIs
149+
'swagger' => true, // generate swagger for your APIs
150150

151151
'tests' => false, // generate test cases for your APIs
152152

src/Generators/API/APIControllerGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ private function docsVariables(): array
5454
$methods = ['controller', 'index', 'store', 'show', 'update', 'destroy'];
5555

5656
if ($this->config->options->swagger) {
57-
$templatePrefix = 'controller_docs';
57+
$templatePrefix = 'controller';
5858
$templateType = 'swagger-generator';
5959
} else {
6060
$templatePrefix = 'api.docs.controller';

src/Generators/ModelGenerator.php

Lines changed: 16 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function variables(): array
4343
'fillables' => implode(','.infy_nl_tab(1, 2), $this->generateFillables()),
4444
'casts' => implode(','.infy_nl_tab(1, 2), $this->generateCasts()),
4545
'rules' => implode(','.infy_nl_tab(1, 2), $this->generateRules()),
46-
'docs' => $this->fillDocs(),
46+
'swaggerDocs' => $this->fillDocs(),
4747
'customPrimaryKey' => $this->customPrimaryKey(),
4848
'customCreatedAt' => $this->customCreatedAt(),
4949
'customUpdatedAt' => $this->customUpdatedAt(),
@@ -121,94 +121,28 @@ private function fillDocs(): string
121121
return '';
122122
}
123123

124-
$templateData = $this->generateSwagger('');
125-
126-
$docsTemplate = get_template('docs.model', 'laravel-generator');
127-
$docsTemplate = fill_template($this->config->dynamicVars, $docsTemplate);
128-
129-
$fillables = '';
130-
$fieldsArr = [];
131-
$count = 1;
132-
if (isset($this->config->relations) && !empty($this->config->relations)) {
133-
foreach ($this->config->relations as $relation) {
134-
$field = $relationText = (isset($relation->inputs[0])) ? $relation->inputs[0] : null;
135-
if (in_array($field, $fieldsArr)) {
136-
$relationText = $relationText.'_'.$count;
137-
$count++;
138-
}
139-
140-
$fillables .= ' * @property '.$this->getPHPDocType($relation->type, $relation, $relationText).infy_nl();
141-
$fieldsArr[] = $field;
142-
}
143-
}
144-
145-
if (isset($this->config->fields) && !empty($this->config->fields)) {
146-
foreach ($this->config->fields as $field) {
147-
if ($field->isFillable) {
148-
$fillables .= ' * @property '.$this->getPHPDocType($field->fieldType).' $'.$field->name.infy_nl();
149-
}
150-
}
151-
}
152-
153-
$docsTemplate = str_replace('$GENERATE_DATE$', date('F j, Y, g:i a T'), $docsTemplate);
154-
$docsTemplate = str_replace('$PHPDOC$', $fillables, $docsTemplate);
155-
156-
return str_replace('$DOCS$', $docsTemplate, $templateData);
124+
return $this->generateSwagger();
157125
}
158126

159-
private function getPHPDocType(string $dbType, GeneratorFieldRelation $relation = null, string $relationText = null): string
127+
public function generateSwagger(): string
160128
{
161-
$relationText = (!empty($relationText)) ? $relationText : null;
162-
$modelNamespace = $this->config->namespaces->model;
163-
164-
switch ($dbType) {
165-
case 'datetime':
166-
return 'string|\Carbon\Carbon';
167-
case '1t1':
168-
return '\\'.$modelNamespace.'\\'.$relation->inputs[0].' $'.Str::camel($relationText);
169-
case 'mt1':
170-
if (isset($relation->inputs[1])) {
171-
$relationName = str_replace('_id', '', strtolower($relation->inputs[1]));
172-
} else {
173-
$relationName = $relationText;
174-
}
175-
176-
return '\\'.$modelNamespace.'\\'.$relation->inputs[0].' $'.Str::camel($relationName);
177-
case '1tm':
178-
case 'mtm':
179-
case 'hmt':
180-
return '\Illuminate\Database\Eloquent\Collection $'.Str::camel(Str::plural($relationText));
181-
default:
182-
$fieldData = SwaggerGenerator::getFieldType($dbType);
183-
if (!empty($fieldData['fieldType'])) {
184-
return $fieldData['fieldType'];
185-
}
186-
187-
return $dbType;
188-
}
189-
}
129+
$requiredFields = $this->generateRequiredFields();
190130

191-
public function generateSwagger($templateData): string
192-
{
193131
$fieldTypes = SwaggerGenerator::generateTypes($this->config->fields);
194132

195-
$template = get_template('model_docs.model', 'swagger-generator');
196-
197-
$template = fill_template($this->config->dynamicVars, $template);
198-
199-
$template = str_replace(
200-
'$REQUIRED_FIELDS$',
201-
'"'.implode('"'.', '.'"', $this->generateRequiredFields()).'"',
202-
$template
203-
);
204-
205-
$propertyTemplate = get_template('model_docs.property', 'swagger-generator');
206-
207-
$properties = SwaggerGenerator::preparePropertyFields($propertyTemplate, $fieldTypes);
133+
$properties = [];
134+
foreach ($fieldTypes as $fieldType) {
135+
$properties[] = view(
136+
'swagger-generator::model.property', $fieldType
137+
)->render();
138+
}
208139

209-
$template = str_replace('$PROPERTIES$', implode(",\n", $properties), $template);
140+
$requiredFields = '{'.implode(',', $requiredFields).'}';
210141

211-
return str_replace('$DOCS$', $template, $templateData);
142+
return view('swagger-generator::model.model', [
143+
'requiredFields' => $requiredFields,
144+
'properties' => implode(",".infy_nl().' ', $properties),
145+
]);
212146
}
213147

214148
private function generateRequiredFields(): array
@@ -219,7 +153,7 @@ private function generateRequiredFields(): array
219153
foreach ($this->config->fields as $field) {
220154
if (!empty($field->validations)) {
221155
if (Str::contains($field->validations, 'required')) {
222-
$requiredFields[] = $field->name;
156+
$requiredFields[] = '"'.$field->name.'"';
223157
}
224158
}
225159
}

src/Generators/SwaggerGenerator.php

Lines changed: 14 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,29 @@
66

77
class SwaggerGenerator
88
{
9-
public static array $swaggerTypes = [];
10-
119
public static function generateTypes(array $inputFields): array
1210
{
13-
if (!empty(self::$swaggerTypes)) {
14-
return self::$swaggerTypes;
15-
}
16-
1711
$fieldTypes = [];
1812

1913
/** @var GeneratorField $field */
2014
foreach ($inputFields as $field) {
2115
$fieldData = self::getFieldType($field->fieldType);
22-
$fieldType = $fieldData['fieldType'];
23-
$fieldFormat = $fieldData['fieldFormat'];
2416

25-
if (!empty($fieldType)) {
26-
$fieldType = [
27-
'name' => $field->name,
28-
'type' => $fieldType,
29-
'format' => $fieldFormat,
30-
'nullable' => !$field->isNotNull,
31-
'readOnly' => !$field->isFillable,
32-
];
33-
34-
$fieldType['description'] = (!empty($field->description)) ? $field->description : '';
35-
36-
$fieldTypes[] = $fieldType;
17+
if (empty($fieldData['fieldType'])) {
18+
continue;
3719
}
38-
}
3920

40-
self::$swaggerTypes = $fieldTypes;
21+
$fieldTypes[] = [
22+
'fieldName' => $field->name,
23+
'type' => $fieldData['fieldType'],
24+
'format' => $fieldData['fieldFormat'],
25+
'nullable' => !$field->isNotNull ? 'true': 'false',
26+
'readOnly' => !$field->isFillable ? 'true': 'false',
27+
'description' => (!empty($field->description)) ? $field->description : '',
28+
];
29+
}
4130

42-
return self::$swaggerTypes;
31+
return $fieldTypes;
4332
}
4433

4534
public static function getFieldType($type): array
@@ -49,9 +38,11 @@ public static function getFieldType($type): array
4938
switch (strtolower($type)) {
5039
case 'increments':
5140
case 'integer':
41+
case 'unsignedinteger':
5242
case 'smallinteger':
5343
case 'long':
5444
case 'biginteger':
45+
case 'unsignedbiginteger':
5546
$fieldType = 'integer';
5647
$fieldFormat = 'int32';
5748
break;
@@ -98,48 +89,4 @@ public static function getFieldType($type): array
9889

9990
return ['fieldType' => $fieldType, 'fieldFormat' => $fieldFormat];
10091
}
101-
102-
public static function generateSwagger($fields, $fillables, $variables): string
103-
{
104-
$template = get_template('model_docs.model', 'swagger-generator');
105-
106-
$templateData = fill_template($variables, $template);
107-
108-
$templateData = str_replace('$REQUIRED_FIELDS$', '"'.implode('", "', $fillables).'"', $templateData);
109-
110-
$propertyTemplate = get_template('model_docs.property', 'swagger-generator');
111-
112-
$properties = self::preparePropertyFields($propertyTemplate, $fields);
113-
114-
return str_replace('$PROPERTIES$', implode(",\n", $properties), $templateData);
115-
}
116-
117-
public static function preparePropertyFields($template, array $fields): array
118-
{
119-
$templates = [];
120-
121-
foreach ($fields as $field) {
122-
$fieldName = $field['name'];
123-
$type = $field['type'];
124-
$format = $field['format'];
125-
$nullable = $field['nullable'] ? 'true' : 'false';
126-
$readOnly = $field['readOnly'] ? 'true' : 'false';
127-
$propertyTemplate = str_replace('$FIELD_NAME$', $fieldName, $template);
128-
$propertyTemplate = str_replace('$FIELD_NULLABLE$', $nullable, $propertyTemplate);
129-
$propertyTemplate = str_replace('$FIELD_READ_ONLY$', $readOnly, $propertyTemplate);
130-
$description = $field['description'];
131-
if (empty($description)) {
132-
$description = $fieldName;
133-
}
134-
$propertyTemplate = str_replace('$DESCRIPTION$', $description, $propertyTemplate);
135-
$propertyTemplate = str_replace('$FIELD_TYPE$', $type, $propertyTemplate);
136-
if (!empty($format)) {
137-
$format = ",\n * format=\"".$format.'"';
138-
}
139-
$propertyTemplate = str_replace('$FIELD_FORMAT$', $format, $propertyTemplate);
140-
$templates[] = $propertyTemplate;
141-
}
142-
143-
return $templates;
144-
}
14592
}

views/model/model.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
@if($config->options->softDelete) {{ 'use Illuminate\Database\Eloquent\SoftDeletes;' }};@endif
99
@if($config->options->tests) {{ 'use Illuminate\Database\Eloquent\Factories\HasFactory;' }};@endif
1010

11-
@if(isset($swaggerDocs)){{ $swaggerDocs }}@endif
11+
@if(isset($swaggerDocs)){!! $swaggerDocs !!}@endif
1212
class {{ $config->modelNames->name }} extends Model
1313
{
1414
@if($config->options->softDelete) {{ infy_tab().'use SoftDeletes;' }}@endif

0 commit comments

Comments
 (0)