diff src/Replacer/TableReplacer.php @ 39:b5c6ebd33547 ls_dev_2025_09

Improving the factories, tests, and requests
author Luka Sitas <sitas.luka.97@gmail.com>
date Thu, 25 Sep 2025 23:16:13 -0400
parents 8dd668020310
children 2cf26b593f4a
line wrap: on
line diff
--- a/src/Replacer/TableReplacer.php	Thu Sep 25 20:24:13 2025 -0400
+++ b/src/Replacer/TableReplacer.php	Thu Sep 25 23:16:13 2025 -0400
@@ -51,15 +51,15 @@
             if (in_array($column['name'], $this->columns_to_ignore)) {
                 continue;
             }
-						$type = $column['type_name'];
-						//date
-						if(in_array($type, ['date'])) {
-							$insert .= sprintf("'%s' => 'date:Y-m-d',", $column['name'])."\n";
-						}
-						//time
-						if(in_array($type, ['timestamp'])) {
-							$insert .= sprintf("'%s' => 'date:Y-m-d H:i',", $column['name'])."\n";
-						}
+            $type = $column['type_name'];
+            // date
+            if (in_array($type, ['date'])) {
+                $insert .= sprintf("'%s' => 'date:Y-m-d',", $column['name'])."\n";
+            }
+            // time
+            if (in_array($type, ['timestamp'])) {
+                $insert .= sprintf("'%s' => 'date:Y-m-d H:i',", $column['name'])."\n";
+            }
         }
 
         return $insert;
@@ -104,10 +104,81 @@
     {
         $insert = '';
         foreach ($this->get_columns() as $column) {
+            // Don't do validation on some of the basic columns
             if (in_array($column['name'], $this->columns_to_ignore)) {
                 continue;
             }
-            $insert .= sprintf("'%s' => 'nullable',", $column['name'])."\n";
+
+            $options = [];
+
+            // Add default value checks if needed
+            if (is_null($column['default']) && ! $column['nullable']) {
+                $options[] = "'required'";
+            }
+            else {
+                $options[] = "'nullable'";
+            }
+
+            // Determine the validations based on column type
+            $type = strtolower($column['type_name']);
+            $size = (preg_match('/\((\d+)\)/', $column['type'], $matches)) ? $matches[1] : null;
+
+            switch ($type) {
+                case 'varchar':
+                case 'char':
+                    $options[] = "'string'";
+
+                    // Extract length if defined
+                    if (! is_null($size)) {
+                        $options[] = "'max:$size'";
+                    }
+                    break;
+
+                case 'text':
+                    $options[] = "'string'";
+                    break;
+
+                case 'int':
+                case 'tinyint':
+                case 'smallint':
+                case 'mediumint':
+                case 'bigint':
+                    $options[] = "'integer'";
+                    if (strpos($column['type'], 'unsigned') !== false) {
+                        $options[] = "'min:0'";
+                    }
+                    if (! is_null($size)) {
+                        $options[] = "'max_digits:".$size."'";
+                    }
+                    break;
+
+                case 'decimal':
+                case 'double':
+                case 'float':
+                    $options[] = "'numeric'";
+                    // Extract precision and scale if defined
+                    if (preg_match('/\((\d+),(\d+)\)/', $column['type'], $matches)) {
+                        $precision = $matches[1];
+                        $scale = isset($matches[2]) ? ','.$matches[2] : '';
+
+                        $options[] = "'decimal:$precision$scale'";
+                    }
+                    break;
+
+                case 'boolean':
+                    $options[] = "'boolean'";
+                    break;
+
+                case 'date':
+                case 'datetime':
+                case 'timestamp':
+                    $options[] = "'date'";
+                    break;
+
+                    // Add other types as needed
+            }
+
+            $insert .= sprintf("'%s' => [%s],\n", $column['name'], implode(',', $options));
         }
 
         return $insert;