@@ -9047,6 +9047,7 @@ public function jsonSerialize()
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 @@ private function setPath(string $tableName) /*: void*/
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 @@ private function setComponentSchema(string $tableName, array $references) /*: vo
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 );
0 commit comments