Skip to content

Commit

Permalink
move fields mapping into a helper class
Browse files Browse the repository at this point in the history
  • Loading branch information
mjauvin committed Jul 5, 2023
1 parent 68be02b commit 9ccbb0d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 40 deletions.
42 changes: 2 additions & 40 deletions modules/system/console/CreateMigration.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Str;
use System\Console\BaseScaffoldCommand;
use System\Classes\VersionManager;
use System\Helpers\Migration;
use Yaml;

/**
Expand Down Expand Up @@ -250,7 +251,7 @@ protected function processVars($vars): array
continue;
}

$vars['fields'][$field] = $this->mapFieldType($field, $config);
$vars['fields'][$field] = Migration::mapFieldType($field, $config);
}
}

Expand Down Expand Up @@ -286,45 +287,6 @@ protected function processVars($vars): array
return $vars;
}

protected function mapFieldType($name, $fieldConfig)
{
switch ($fieldConfig['type'] ?? 'text') {
case 'checkbox':
case 'switch':
$dbType = 'boolean';
break;
case 'number':
if (isset($fieldConfig['step']) && is_int($fieldConfig['step'])) {
$dbType = 'integer';
} else {
$dbType = 'double';
}
if ($dbType === 'integer' && isset($fieldConfig['min']) && $fieldConfig['min'] >= 0) {
$dbType = 'unsignedInteger';
}
break;
case 'range':
$dbType = 'unsignedInteger';
break;
case 'datepicker':
$dbType = 'datetime';
break;
case 'markdown':
case 'textarea':
$dbType = 'mediumText';
break;
default:
$dbType = 'string';
}
$required = $fieldConfig['required'] ?? false;

return [
'type' => $dbType,
'required' => $required,
'index' => in_array($name, ["slug"]) or str_ends_with($name, "_id"),
];
}

/**
* Get the next version number based on the current number.
*/
Expand Down
43 changes: 43 additions & 0 deletions modules/system/helpers/Migration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php namespace System\Helpers;

class Migration
{
public static function mapFieldType($name, $fieldConfig)
{
switch ($fieldConfig['type'] ?? 'text') {
case 'checkbox':
case 'switch':
$dbType = 'boolean';
break;
case 'number':
if (isset($fieldConfig['step']) && is_int($fieldConfig['step'])) {
$dbType = 'integer';
} else {
$dbType = 'double';
}
if ($dbType === 'integer' && isset($fieldConfig['min']) && $fieldConfig['min'] >= 0) {
$dbType = 'unsignedInteger';
}
break;
case 'range':
$dbType = 'unsignedInteger';
break;
case 'datepicker':
$dbType = 'datetime';
break;
case 'markdown':
case 'textarea':
$dbType = 'mediumText';
break;
default:
$dbType = 'string';
}
$required = $fieldConfig['required'] ?? false;

return [
'type' => $dbType,
'required' => $required,
'index' => in_array($name, ["slug"]) or str_ends_with($name, "_id"),
];
}
}

0 comments on commit 9ccbb0d

Please sign in to comment.