@@ -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 );
0 commit comments