|
@@ -9047,6 +9047,7 @@ namespace Tqdev\PhpCrudApi\OpenApi {
|
9047
|
9047
|
use Tqdev\PhpCrudApi\Column\ReflectionService;
|
9048
|
9048
|
use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
|
9049
|
9049
|
use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
|
|
9050
|
+ use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
|
9050
|
9051
|
|
9051
|
9052
|
class OpenApiRecordsBuilder
|
9052
|
9053
|
{
|
|
@@ -9210,6 +9211,49 @@ namespace Tqdev\PhpCrudApi\OpenApi {
|
9210
|
9211
|
}
|
9211
|
9212
|
}
|
9212
|
9213
|
|
|
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
|
+
|
9213
|
9257
|
private function setComponentSchema(string $tableName, array $references) /*: void*/
|
9214
|
9258
|
{
|
9215
|
9259
|
$table = $this->reflection->getTable($tableName);
|
|
@@ -9247,6 +9291,7 @@ namespace Tqdev\PhpCrudApi\OpenApi {
|
9247
|
9291
|
$properties = $this->types[$column->getType()];
|
9248
|
9292
|
$properties['maxLength'] = $column->hasLength() ? $column->getLength() : 0;
|
9249
|
9293
|
$properties['nullable'] = $column->getNullable();
|
|
9294
|
+ $properties['pattern'] = $this->getPattern($column);
|
9250
|
9295
|
foreach ($properties as $key => $value) {
|
9251
|
9296
|
if ($value) {
|
9252
|
9297
|
$this->openapi->set("$prefix|properties|$columnName|$key", $value);
|