Skip to content

Commit 49d6ce2

Browse files
committed
add pattern to type
1 parent 1827cb5 commit 49d6ce2

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

api.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9047,6 +9047,7 @@ public function jsonSerialize()
90479047
use Tqdev\PhpCrudApi\Column\ReflectionService;
90489048
use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
90499049
use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
9050+
use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
90509051

90519052
class OpenApiRecordsBuilder
90529053
{
@@ -9210,6 +9211,49 @@ private function setPath(string $tableName) /*: void*/
92109211
}
92119212
}
92129213

9214+
private function getPattern(ReflectedColumn $column): string
9215+
{
9216+
switch ($column->getType()) {
9217+
case 'integer':
9218+
$n = strlen(pow(2, 31));
9219+
return '^-?[0-9]{1,' . $n . '}$';
9220+
case 'bigint':
9221+
$n = strlen(pow(2, 63));
9222+
return '^-?[0-9]{1,' . $n . '}$';
9223+
case 'varchar':
9224+
$l = $column->getLength();
9225+
return '^.{0,' . $l . '}$';
9226+
case 'clob':
9227+
return '^.*$';
9228+
case 'varbinary':
9229+
$l = $column->getLength();
9230+
$b = (int) 4 * ceil($l / 3);
9231+
return '^[A-Za-z0-9+/]{0,' . $b . '}=*$';
9232+
case 'blob':
9233+
return '^[A-Za-z0-9+/]*=*$';
9234+
case 'decimal':
9235+
$p = $column->getPrecision();
9236+
$s = $column->getScale();
9237+
return '^-?[0-9]{1,' . ($p - $s) . '}(\.[0-9]{1,' . $s . '})?$';
9238+
case 'float':
9239+
return '^-?[0-9]+(\.[0-9]+)$';
9240+
case 'double':
9241+
return '^-?[0-9]+(\.[0-9]+)$';
9242+
case 'date':
9243+
return '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
9244+
case 'time':
9245+
return '^[0-9]{2}:[0-9]{2}:[0-9]{2}$';
9246+
case 'timestamp':
9247+
return '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$';
9248+
return '';
9249+
case 'geometry':
9250+
return '^(POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON)\s*\(.*$';
9251+
case 'boolean':
9252+
return '^(true|false)$';
9253+
}
9254+
return '';
9255+
}
9256+
92139257
private function setComponentSchema(string $tableName, array $references) /*: void*/
92149258
{
92159259
$table = $this->reflection->getTable($tableName);
@@ -9247,6 +9291,7 @@ private function setComponentSchema(string $tableName, array $references) /*: vo
92479291
$properties = $this->types[$column->getType()];
92489292
$properties['maxLength'] = $column->hasLength() ? $column->getLength() : 0;
92499293
$properties['nullable'] = $column->getNullable();
9294+
$properties['pattern'] = $this->getPattern($column);
92509295
foreach ($properties as $key => $value) {
92519296
if ($value) {
92529297
$this->openapi->set("$prefix|properties|$columnName|$key", $value);

src/Tqdev/PhpCrudApi/OpenApi/OpenApiRecordsBuilder.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Tqdev\PhpCrudApi\Column\ReflectionService;
66
use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
77
use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
8+
use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
89

910
class OpenApiRecordsBuilder
1011
{
@@ -168,6 +169,49 @@ private function setPath(string $tableName) /*: void*/
168169
}
169170
}
170171

172+
private function getPattern(ReflectedColumn $column): string
173+
{
174+
switch ($column->getType()) {
175+
case 'integer':
176+
$n = strlen(pow(2, 31));
177+
return '^-?[0-9]{1,' . $n . '}$';
178+
case 'bigint':
179+
$n = strlen(pow(2, 63));
180+
return '^-?[0-9]{1,' . $n . '}$';
181+
case 'varchar':
182+
$l = $column->getLength();
183+
return '^.{0,' . $l . '}$';
184+
case 'clob':
185+
return '^.*$';
186+
case 'varbinary':
187+
$l = $column->getLength();
188+
$b = (int) 4 * ceil($l / 3);
189+
return '^[A-Za-z0-9+/]{0,' . $b . '}=*$';
190+
case 'blob':
191+
return '^[A-Za-z0-9+/]*=*$';
192+
case 'decimal':
193+
$p = $column->getPrecision();
194+
$s = $column->getScale();
195+
return '^-?[0-9]{1,' . ($p - $s) . '}(\.[0-9]{1,' . $s . '})?$';
196+
case 'float':
197+
return '^-?[0-9]+(\.[0-9]+)$';
198+
case 'double':
199+
return '^-?[0-9]+(\.[0-9]+)$';
200+
case 'date':
201+
return '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
202+
case 'time':
203+
return '^[0-9]{2}:[0-9]{2}:[0-9]{2}$';
204+
case 'timestamp':
205+
return '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$';
206+
return '';
207+
case 'geometry':
208+
return '^(POINT|LINESTRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON)\s*\(.*$';
209+
case 'boolean':
210+
return '^(true|false)$';
211+
}
212+
return '';
213+
}
214+
171215
private function setComponentSchema(string $tableName, array $references) /*: void*/
172216
{
173217
$table = $this->reflection->getTable($tableName);
@@ -205,6 +249,7 @@ private function setComponentSchema(string $tableName, array $references) /*: vo
205249
$properties = $this->types[$column->getType()];
206250
$properties['maxLength'] = $column->hasLength() ? $column->getLength() : 0;
207251
$properties['nullable'] = $column->getNullable();
252+
$properties['pattern'] = $this->getPattern($column);
208253
foreach ($properties as $key => $value) {
209254
if ($value) {
210255
$this->openapi->set("$prefix|properties|$columnName|$key", $value);

0 commit comments

Comments
 (0)