Selaa lähdekoodia

add pattern to type

Maurits van der Schee 3 vuotta sitten
vanhempi
commit
49d6ce2767
2 muutettua tiedostoa jossa 90 lisäystä ja 0 poistoa
  1. 45
    0
      api.php
  2. 45
    0
      src/Tqdev/PhpCrudApi/OpenApi/OpenApiRecordsBuilder.php

+ 45
- 0
api.php Näytä tiedosto

@@ -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);

+ 45
- 0
src/Tqdev/PhpCrudApi/OpenApi/OpenApiRecordsBuilder.php Näytä tiedosto

@@ -5,6 +5,7 @@ namespace Tqdev\PhpCrudApi\OpenApi;
5 5
 use Tqdev\PhpCrudApi\Column\ReflectionService;
6 6
 use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
7 7
 use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
8
+use Tqdev\PhpCrudApi\Column\Reflection\ReflectedColumn;
8 9
 
9 10
 class OpenApiRecordsBuilder
10 11
 {
@@ -168,6 +169,49 @@ class OpenApiRecordsBuilder
168 169
         }
169 170
     }
170 171
 
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
+
171 215
     private function setComponentSchema(string $tableName, array $references) /*: void*/
172 216
     {
173 217
         $table = $this->reflection->getTable($tableName);
@@ -205,6 +249,7 @@ class OpenApiRecordsBuilder
205 249
                 $properties = $this->types[$column->getType()];
206 250
                 $properties['maxLength'] = $column->hasLength() ? $column->getLength() : 0;
207 251
                 $properties['nullable'] = $column->getNullable();
252
+                $properties['pattern'] = $this->getPattern($column);
208 253
                 foreach ($properties as $key => $value) {
209 254
                     if ($value) {
210 255
                         $this->openapi->set("$prefix|properties|$columnName|$key", $value);

Loading…
Peruuta
Tallenna