# HG changeset patch # User Luka Sitas # Date 1749516664 14400 # Node ID 010ace248d14fcc975a41bd0ed8b4cbe9fb3d99a # Parent f88d2d5dee305e92c83088eaac39394185601e41 Added support for filters, not fully there with relations or anything like that but it's a start diff -r f88d2d5dee30 -r 010ace248d14 src/Generator/Controller/stubs/controller.stub --- a/src/Generator/Controller/stubs/controller.stub Mon Jun 09 19:51:31 2025 -0400 +++ b/src/Generator/Controller/stubs/controller.stub Mon Jun 09 20:51:04 2025 -0400 @@ -11,12 +11,14 @@ /** * Display a listing of the resource. * + * @param {{ filterRequest }} $request * @return \Illuminate\View\View */ - public function index() + public function index({{ filterRequest }} $request) { + $validated = $request->validated(); $data = []; - $data['items'] = {{ model }}::get_data(); + $data['items'] = {{ model }}::get_data($validated); $data = array_merge($data, {{ model }}::load_index()); return view('{{ tableName }}.index', $data); diff -r f88d2d5dee30 -r 010ace248d14 src/Generator/Model/ModelGenerator.php --- a/src/Generator/Model/ModelGenerator.php Mon Jun 09 19:51:31 2025 -0400 +++ b/src/Generator/Model/ModelGenerator.php Mon Jun 09 20:51:04 2025 -0400 @@ -89,7 +89,7 @@ protected function gatherRelations() { $relations = RelationshipNavigator::getRelations($this->getCurrentTable()); - return renderRelations($relations); + return $relations; } @@ -99,9 +99,22 @@ if (in_array($column['name'], $this->columns_to_ignore)) { continue; } - $insert .= sprintf("'%s',", $column['name'])."\n"; + $snippet = $this->getSnippet('filter'); + $tableName = $this->getCurrentTable(); + $value = 'value'; // TODO: this should be determined based on column type + $columnName = $column['name']; + $columnDisplay = Str::headline($columnName); + + // Replace placeholders with actual values + $string = str_replace( + ['{{value}}', '{{columnDisplay}}', '{{tableName}}', '{{columnName}}'], + [$value, $columnDisplay, $tableName, $columnName], + $snippet + ); + $insert .= sprintf("%s", $string); } + return $insert; } protected function renderRelations($relations) { diff -r f88d2d5dee30 -r 010ace248d14 src/Generator/Model/stubs/model.stub --- a/src/Generator/Model/stubs/model.stub Mon Jun 09 19:51:31 2025 -0400 +++ b/src/Generator/Model/stubs/model.stub Mon Jun 09 20:51:04 2025 -0400 @@ -2,11 +2,9 @@ namespace {{ namespace }}; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; -class {{ class }} extends Model +class {{ class }} extends BaseModel { //use HasFactory; use SoftDeletes; @@ -35,7 +33,7 @@ # {{ defaultRelationsInsertPoint }} ]; - protecte static $filters = [ + protected static $filters = [ # {{ defaultFiltersInsertPoint }} ]; @@ -67,22 +65,6 @@ return $this; } - //MARK FOR MODEL - protected static function load_auxilary_data() { - $data = []; - - $instance = new static(); - - foreach($instance->default_relations as $relation) { - $related_model = $instance->$relation()->getRelated(); - $related_table = $related_model->getTable(); - $data[$related_table] = $related_model->all()->pluck('name','id')->toArray(); - } - - return $data; - } - - /** * Retrieve a query builder instance with default relations loaded. * diff -r f88d2d5dee30 -r 010ace248d14 src/Generator/Requests/FilterRequestGenerator.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Generator/Requests/FilterRequestGenerator.php Mon Jun 09 20:51:04 2025 -0400 @@ -0,0 +1,77 @@ +resolveStubPath('/stubs/request.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return is_file($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; + } + + protected function getClassName($name) + { + return $this->filter_request_name($name); + } + + /** + * Get the stub file for the generator. + * + * @return string + */ + protected function getPath($name = null) + { + return str_replace(['App\\', '\\'], ['app/', '/'], $this->getRequestNamespace($this->getTableInput()).'/'.$this->filter_request_name($this->getTableInput()).'.php'); + } +} diff -r f88d2d5dee30 -r 010ace248d14 src/Generator/Requests/RequestGenerator.php --- a/src/Generator/Requests/RequestGenerator.php Mon Jun 09 19:51:31 2025 -0400 +++ b/src/Generator/Requests/RequestGenerator.php Mon Jun 09 20:51:04 2025 -0400 @@ -45,10 +45,15 @@ } if ($this->option('all')) { + $this->input->setOption('filter_request', true); $this->input->setOption('store_request', true); $this->input->setOption('update_request', true); } + if ($this->option('filter_request')) { + $this->createFilterRequest(); + } + if ($this->option('store_request')) { $this->createStoreRequest(); } @@ -65,6 +70,7 @@ { return array_merge(parent::getOptions(), [ ['all', 'a', InputOption::VALUE_NONE, 'Generate all request classes for the table.'], + ['filter_request', 'f', InputOption::VALUE_NONE, 'Generate filter request class for the table.'], ['store_request', 's', InputOption::VALUE_NONE, 'Generate store request class for the table.'], ['update_request', 'u', InputOption::VALUE_NONE, 'Generate update request class for the table.'], ]); @@ -82,6 +88,11 @@ */ protected function getStub() {} + protected function createFilterRequest() + { + $this->call('mf:filter_request', ['table' => $this->getTableInput()]); + } + protected function createStoreRequest() { $this->call('mf:store_request', ['table' => $this->getTableInput()]); diff -r f88d2d5dee30 -r 010ace248d14 src/MagicForgerServiceProvider.php --- a/src/MagicForgerServiceProvider.php Mon Jun 09 19:51:31 2025 -0400 +++ b/src/MagicForgerServiceProvider.php Mon Jun 09 20:51:04 2025 -0400 @@ -7,6 +7,7 @@ use Wizard\MagicForger\Generator\Generator; use Wizard\MagicForger\Generator\Model\ModelGenerator; use Wizard\MagicForger\Generator\Requests\RequestGenerator; +use Wizard\MagicForger\Generator\Requests\FilterRequestGenerator; use Wizard\MagicForger\Generator\Requests\StoreRequestGenerator; use Wizard\MagicForger\Generator\Requests\UpdateRequestGenerator; use Wizard\MagicForger\Generator\Route\RouteGenerator; @@ -28,6 +29,7 @@ ControllerGenerator::class, ModelGenerator::class, RequestGenerator::class, + FilterRequestGenerator::class, StoreRequestGenerator::class, UpdateRequestGenerator::class, RouteGenerator::class, diff -r f88d2d5dee30 -r 010ace248d14 src/Replacer/Replacer.php --- a/src/Replacer/Replacer.php Mon Jun 09 19:51:31 2025 -0400 +++ b/src/Replacer/Replacer.php Mon Jun 09 20:51:04 2025 -0400 @@ -65,8 +65,9 @@ '{{ requestUses }}' => $this->getRequestUses($table_name), '{{ rootNamespace }}' => $this->getRootNamespace(), '{{ storeRequest }}' => $this->store_request_name($table_name), + '{{ filterRequest }}' => $this->filter_request_name($table_name), + '{{ updateRequest }}' => $this->update_request_name($table_name), '{{ tableName }}' => $table_name, - '{{ updateRequest }}' => $this->update_request_name($table_name), ]; } @@ -107,6 +108,14 @@ } /** + * Generate the filter request name. + */ + public function filter_request_name(string $name): string + { + return 'Filter'.$this->model_name($name).'Request'; + } + + /** * Generate the update request name. */ public function update_request_name(string $name): string @@ -211,6 +220,14 @@ } /** + * Get the filter request namespace. + */ + public function getFilterRequestNamespace(string $name): string + { + return $this->getRequestNamespace($name); + } + + /** * Get the update request namespace. */ public function getUpdateRequestNamespace(string $name): string @@ -258,6 +275,7 @@ { return implode("\n", [ 'use '.$this->getRequestNamespace($name).'\\'.$this->store_request_name($name).';', + 'use '.$this->getRequestNamespace($name).'\\'.$this->filter_request_name($name).';', 'use '.$this->getRequestNamespace($name).'\\'.$this->update_request_name($name).';', ]); }