Skip to content

Commit ba23bfe

Browse files
committed
the swagger generator is now attribute-based, added empty validators for remaining types
1 parent 73ee0a1 commit ba23bfe

11 files changed

Lines changed: 160 additions & 20 deletions

app/commands/MetaTester.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public function test(string $arg)
4646
// $format = new UserFormat();
4747
// var_dump($format->checkedAssign("email", "a@a.a.a"));
4848

49-
/*
5049
$inDir = __DIR__ . "/../V1Module/presenters";
5150
$outDir = __DIR__ . "/../V1Module/presenters2";
5251

@@ -80,10 +79,9 @@ public function test(string $arg)
8079
fwrite($newFile, $newContent);
8180
fclose($newFile);
8281
}
83-
*/
8482

85-
$reflection = AnnotationHelper::getMethod("App\V1Module\Presenters\RegistrationPresenter", "actionCreateAccount");
86-
$attrs = MetaFormatHelper::extractRequestParamData($reflection);
87-
var_dump($attrs);
83+
// $reflection = AnnotationHelper::getMethod("App\V1Module\Presenters\RegistrationPresenter", "actionCreateAccount");
84+
// $attrs = MetaFormatHelper::extractRequestParamData($reflection);
85+
// var_dump($attrs);
8886
}
8987
}

app/helpers/MetaFormats/AnnotationToAttributeConverter.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,31 @@ private static function convertAnnotationValidationToValidatorString(string $val
136136
return "new StringValidator()";
137137
}
138138

139+
///TODO: this ignores nullability
140+
if (str_ends_with($validation, "|null")) {
141+
$validation = substr($validation, 0, -5);
142+
}
143+
139144
switch ($validation) {
140145
case "email":
146+
// there is one occurrence of this
147+
case "email:1..":
141148
return "new EmailValidator()";
149+
case "numericint":
150+
return "new IntValidator()";
151+
case "bool":
152+
case "boolean":
153+
return "new BoolValidator()";
154+
case "array":
155+
case "list":
156+
return "new ArrayValidator()";
157+
case "timestamp":
158+
return "new TimestampValidator()";
159+
case "numeric":
160+
return "new FloatValidator()";
142161
default:
143162
///TODO
163+
var_dump("unsupported: $validation");
144164
return "\"UNSUPPORTED\"";
145165
}
146166
}
@@ -165,6 +185,11 @@ public static function convertFile(string $path)
165185
$lines[] = "use App\Helpers\MetaFormats\Validators\StringValidator;";
166186
$lines[] = "use App\Helpers\MetaFormats\Validators\EmailValidator;";
167187
$lines[] = "use App\Helpers\MetaFormats\Validators\UuidValidator;";
188+
$lines[] = "use App\Helpers\MetaFormats\Validators\BoolValidator;";
189+
$lines[] = "use App\Helpers\MetaFormats\Validators\ArrayValidator;";
190+
$lines[] = "use App\Helpers\MetaFormats\Validators\FloatValidator;";
191+
$lines[] = "use App\Helpers\MetaFormats\Validators\IntValidator;";
192+
$lines[] = "use App\Helpers\MetaFormats\Validators\TimestampValidator;";
168193
$lines[] = $line;
169194
$usingsAdded = true;
170195
// store attribute lines in the buffer and do not write them

app/helpers/MetaFormats/MetaFormatHelper.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,13 @@ public static function extractRequestParamData(ReflectionMethod $reflectionMetho
9999
$data = [];
100100
foreach ($attrs as $attr) {
101101
$paramAttr = $attr->newInstance();
102-
$type = $paramAttr->type;
103-
$description = $paramAttr->description;
104-
$required = $paramAttr->required;
105-
$validators = $paramAttr->validators;
106-
107-
$data[] = new RequestParamData($type, $description, $required, $validators);
102+
$data[] = new RequestParamData(
103+
$paramAttr->type,
104+
$paramAttr->paramName,
105+
$paramAttr->description,
106+
$paramAttr->required,
107+
$paramAttr->validators
108+
);
108109
}
109110

110111
return $data;
@@ -123,7 +124,7 @@ public static function extractRequestAttributeData(
123124
$description = array_key_exists("description", $requestArguments) ? $requestArguments["description"] : "";
124125
$required = array_key_exists("required", $requestArguments) ? $requestArguments["required"] : true;
125126

126-
return new RequestParamData($type, $description, $required);
127+
return new RequestParamData($type, "TODO_IMPLEMENT_FOR_FormatParameterAttribute", $description, $required);
127128
}
128129

129130
/**

app/helpers/MetaFormats/RequestParamData.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,43 @@
22

33
namespace App\Helpers\MetaFormats;
44

5+
use App\Helpers\MetaFormats\Validators\StringValidator;
6+
use App\Helpers\Swagger\AnnotationParameterData;
7+
58
class RequestParamData
69
{
710
public RequestParamType $type;
11+
public string $name;
812
public string $description;
913
public bool $required;
1014
public array $validators;
1115

12-
public function __construct(RequestParamType $type, string $description, bool $required, array $validators = [])
13-
{
16+
public function __construct(
17+
RequestParamType $type,
18+
string $name,
19+
string $description,
20+
bool $required,
21+
array $validators = []
22+
) {
1423
$this->type = $type;
24+
$this->name = $name;
1525
$this->description = $description;
1626
$this->required = $required;
1727
$this->validators = $validators;
1828
}
29+
30+
public function toAnnotationParameterData()
31+
{
32+
$dataType = null;
33+
if (count($this->validators) > 0) {
34+
$dataType = $this->validators[0]::SWAGGER_TYPE;
35+
}
36+
37+
return new AnnotationParameterData(
38+
$dataType,
39+
$this->name,
40+
$this->description,
41+
strtolower($this->type->name)
42+
);
43+
}
1944
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Helpers\MetaFormats\Validators;
4+
5+
use App\Helpers\MetaFormats\PhpTypes;
6+
use App\Helpers\MetaFormats\PrimitiveFormatValidators;
7+
8+
class ArrayValidator
9+
{
10+
public const SWAGGER_TYPE = "array";
11+
12+
public function validate(string $value)
13+
{
14+
///TODO: check if array, check content
15+
return true;
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Helpers\MetaFormats\Validators;
4+
5+
use App\Helpers\MetaFormats\PhpTypes;
6+
use App\Helpers\MetaFormats\PrimitiveFormatValidators;
7+
8+
class BoolValidator
9+
{
10+
public const SWAGGER_TYPE = "boolean";
11+
12+
public function validate(string $value)
13+
{
14+
///TODO: check if bool
15+
return true;
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Helpers\MetaFormats\Validators;
4+
5+
use App\Helpers\MetaFormats\PhpTypes;
6+
use App\Helpers\MetaFormats\PrimitiveFormatValidators;
7+
8+
class FloatValidator
9+
{
10+
public const SWAGGER_TYPE = "number";
11+
12+
public function validate(string $value)
13+
{
14+
///TODO: check if float
15+
return true;
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Helpers\MetaFormats\Validators;
4+
5+
use App\Helpers\MetaFormats\PhpTypes;
6+
use App\Helpers\MetaFormats\PrimitiveFormatValidators;
7+
8+
class IntValidator
9+
{
10+
public const SWAGGER_TYPE = "integer";
11+
12+
public function validate(string $value)
13+
{
14+
///TODO: check if int
15+
return true;
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Helpers\MetaFormats\Validators;
4+
5+
use App\Helpers\MetaFormats\PhpTypes;
6+
use App\Helpers\MetaFormats\PrimitiveFormatValidators;
7+
8+
class TimestampValidator
9+
{
10+
public const SWAGGER_TYPE = "string";
11+
12+
public function validate(string $value)
13+
{
14+
///TODO: check if timestamp
15+
return true;
16+
}
17+
}

app/helpers/Swagger/AnnotationHelper.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Helpers\Swagger;
44

5+
use App\Helpers\MetaFormats\MetaFormatHelper;
56
use ReflectionClass;
67
use ReflectionMethod;
78
use Exception;
@@ -39,8 +40,10 @@ private static function extractAnnotationHttpMethod(array $annotations): HttpMet
3940

4041
// check if the annotations have an http method
4142
foreach ($methods as $methodString => $methodEnum) {
42-
if (in_array($methodString, $annotations)) {
43-
return $methodEnum;
43+
foreach ($annotations as $annotation) {
44+
if (str_starts_with($annotation, $methodString)) {
45+
return $methodEnum;
46+
}
4447
}
4548
}
4649

@@ -218,8 +221,11 @@ public static function extractAnnotationData(string $className, string $methodNa
218221

219222
$httpMethod = self::extractAnnotationHttpMethod($methodAnnotations);
220223
$standardAnnotationParams = self::extractStandardAnnotationParams($methodAnnotations, $route);
221-
$netteAnnotationParams = self::extractNetteAnnotationParams($methodAnnotations);
222-
$params = array_merge($standardAnnotationParams, $netteAnnotationParams);
224+
$attributeData = MetaFormatHelper::extractRequestParamData(self::getMethod($className, $methodName));
225+
$attributeParams = array_map(function ($data) {
226+
return $data->toAnnotationParameterData();
227+
}, $attributeData);
228+
$params = array_merge($standardAnnotationParams, $attributeParams);
223229

224230
$pathParams = [];
225231
$queryParams = [];

0 commit comments

Comments
 (0)