# HG changeset patch # User luka # Date 1714002822 14400 # Node ID 3426c7e91c24229fec451a8cc57e12be64d391ae # Parent a9ff874afdbdeae33110bdd82eb0937be96ec7ee Modifying generaters and replacers diff -r a9ff874afdbd -r 3426c7e91c24 .php-cs-fixer.cache --- a/.php-cs-fixer.cache Sat Dec 02 10:20:32 2023 -0500 +++ b/.php-cs-fixer.cache Wed Apr 24 19:53:42 2024 -0400 @@ -1,1 +1,1 @@ -{"php":"8.2.12","version":"3.19.1","indent":" ","lineEnding":"\n","rules":{"align_multiline_comment":true,"array_syntax":true,"backtick_to_shell_exec":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["return"]},"cast_spaces":true,"class_attributes_separation":{"elements":{"method":"one"}},"class_definition":{"single_line":true},"class_reference_name_casing":true,"clean_namespace":true,"concat_space":true,"curly_braces_position":{"allow_single_line_anonymous_functions":true,"allow_single_line_empty_anonymous_classes":true},"declare_parentheses":true,"echo_tag_syntax":true,"empty_loop_body":{"style":"braces"},"empty_loop_condition":true,"fully_qualified_strict_types":true,"function_typehint_space":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"global_namespace_import":{"import_classes":false,"import_constants":false,"import_functions":false},"include":true,"increment_style":true,"integer_literal_case":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":{"on_multiline":"ignore"},"native_function_casing":true,"native_function_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["attribute","case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_null_property_initialization":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"remove_inheritdoc":true},"no_trailing_comma_in_singleline":true,"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","others","return","switch_case","yield","yield_from"]},"no_unneeded_curly_braces":{"namespaces":true},"no_unneeded_import_alias":true,"no_unset_cast":true,"no_unused_imports":true,"no_useless_concat_operator":true,"no_useless_nullsafe_operator":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"nullable_type_declaration_for_default_null_value":{"use_nullable_type_declaration":false},"object_operator_without_whitespace":true,"operator_linebreak":{"only_booleans":true},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"alpha"},"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":true,"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":{"order":["param","return","throws"]},"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"semicolon_after_instruction":true,"simple_to_complex_string_variable":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_comment_spacing":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_around_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"switch_continue_to_break":true,"trailing_comma_in_multiline":true,"trim_array_spaces":true,"types_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true,"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"compact_nullable_typehint":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_line_after_imports":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true},"hashes":{"src\/Generator\/Route\/RouteGenerator.php":"02bf90516b88a1b0b00a84afb10d8a45","src\/Generator\/Controller\/ControllerGenerator.php":"717cdb9124e7e4afe4a28e17b94089e9","src\/Generator\/Model\/ModelGenerator.php":"31743678bf017f63680db19e9682df45","src\/Generator\/Generator.php":"c7cd32166a24be83f6575d33f6c4ba80","src\/Generator\/Requests\/UpdateRequestGenerator.php":"63475513d258b0727637db19629d4ac6","src\/Generator\/Requests\/RequestGenerator.php":"93fbc04a1ea18b794ee7f24902ae9cc1","src\/Generator\/Requests\/StoreRequestGenerator.php":"42bac2b426288d9a08216dfc5fe45faf","src\/Generator\/BaseGenerator.php":"c0aa37a727252383bc28aebf7a0019ec","src\/MagicForgerServiceProvider.php":"00c1321ad894d1e0807036dbe9114bf2","src\/Replacer\/Replacer.php":"501a0ebcf606a7602973b6033ee54b8e","src\/Replacer\/TableReplacer.php":"dc289802665136521abf6ffea0203732","src\/ConfigHelper.php":"c11480fee67c40ca948c38c14bed7d16"}} \ No newline at end of file +{"php":"8.2.12","version":"3.19.1","indent":" ","lineEnding":"\n","rules":{"align_multiline_comment":true,"array_syntax":true,"backtick_to_shell_exec":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["return"]},"cast_spaces":true,"class_attributes_separation":{"elements":{"method":"one"}},"class_definition":{"single_line":true},"class_reference_name_casing":true,"clean_namespace":true,"concat_space":true,"curly_braces_position":{"allow_single_line_anonymous_functions":true,"allow_single_line_empty_anonymous_classes":true},"declare_parentheses":true,"echo_tag_syntax":true,"empty_loop_body":{"style":"braces"},"empty_loop_condition":true,"fully_qualified_strict_types":true,"function_typehint_space":true,"general_phpdoc_tag_rename":{"replacements":{"inheritDocs":"inheritDoc"}},"global_namespace_import":{"import_classes":false,"import_constants":false,"import_functions":false},"include":true,"increment_style":true,"integer_literal_case":true,"lambda_not_used_import":true,"linebreak_after_opening_tag":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":{"on_multiline":"ignore"},"native_function_casing":true,"native_function_type_declaration_casing":true,"no_alias_language_construct_call":true,"no_alternative_syntax":true,"no_binary_string":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["attribute","case","continue","curly_brace_block","default","extra","parenthesis_brace_block","square_brace_block","switch","throw","use"]},"no_leading_namespace_whitespace":true,"no_mixed_echo_print":true,"no_multiline_whitespace_around_double_arrow":true,"no_null_property_initialization":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_superfluous_phpdoc_tags":{"remove_inheritdoc":true},"no_trailing_comma_in_singleline":true,"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","others","return","switch_case","yield","yield_from"]},"no_unneeded_curly_braces":{"namespaces":true},"no_unneeded_import_alias":true,"no_unset_cast":true,"no_unused_imports":true,"no_useless_concat_operator":true,"no_useless_nullsafe_operator":true,"no_whitespace_before_comma_in_array":true,"normalize_index_brace":true,"nullable_type_declaration_for_default_null_value":{"use_nullable_type_declaration":false},"object_operator_without_whitespace":true,"operator_linebreak":{"only_booleans":true},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"alpha"},"php_unit_fqcn_annotation":true,"php_unit_method_casing":true,"phpdoc_align":true,"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":{"order":["param","return","throws"]},"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_tag_type":{"tags":{"inheritDoc":"inline"}},"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_trim_consecutive_blank_line_separation":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"semicolon_after_instruction":true,"simple_to_complex_string_variable":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_comment_spacing":true,"single_line_comment_style":{"comment_types":["hash"]},"single_line_throw":true,"single_quote":true,"single_space_around_construct":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"switch_continue_to_break":true,"trailing_comma_in_multiline":true,"trim_array_spaces":true,"types_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true,"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"compact_nullable_typehint":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"return_type_declaration":true,"short_scalar_cast":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_line_after_imports":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true},"hashes":{"src\/Generator\/Route\/RouteGenerator.php":"02bf90516b88a1b0b00a84afb10d8a45","src\/Generator\/Controller\/ControllerGenerator.php":"717cdb9124e7e4afe4a28e17b94089e9","src\/Generator\/Model\/ModelGenerator.php":"00eeb5bd27acee0bff89fac12dfd21ac","src\/Generator\/Generator.php":"c7cd32166a24be83f6575d33f6c4ba80","src\/Generator\/Requests\/UpdateRequestGenerator.php":"63475513d258b0727637db19629d4ac6","src\/Generator\/Requests\/RequestGenerator.php":"93fbc04a1ea18b794ee7f24902ae9cc1","src\/Generator\/Requests\/StoreRequestGenerator.php":"42bac2b426288d9a08216dfc5fe45faf","src\/Generator\/BaseGenerator.php":"c0aa37a727252383bc28aebf7a0019ec","src\/MagicForgerServiceProvider.php":"00c1321ad894d1e0807036dbe9114bf2","src\/Replacer\/Replacer.php":"501a0ebcf606a7602973b6033ee54b8e","src\/Replacer\/TableReplacer.php":"dc289802665136521abf6ffea0203732","src\/ConfigHelper.php":"6821f761a93d04ff466da1529442b304","src\/Replacer\/BladeReplacer.php":"fc8e7f3f50008e83d690d1fea0b19193"}} \ No newline at end of file diff -r a9ff874afdbd -r 3426c7e91c24 composer.json --- a/composer.json Sat Dec 02 10:20:32 2023 -0500 +++ b/composer.json Wed Apr 24 19:53:42 2024 -0400 @@ -9,7 +9,8 @@ }, "minimum-stability": "stable", "require": { - "laravel/framework": ">=10.3" + "laravel/framework": ">=10.3", + "doctrine/dbal": "^3.6" }, "extra": { "laravel": { diff -r a9ff874afdbd -r 3426c7e91c24 src/ConfigHelper.php --- a/src/ConfigHelper.php Sat Dec 02 10:20:32 2023 -0500 +++ b/src/ConfigHelper.php Wed Apr 24 19:53:42 2024 -0400 @@ -2,6 +2,8 @@ namespace Wizzard\MagicForger; +use Illuminate\Support\Collection; + class ConfigHelper { // Config array @@ -11,32 +13,32 @@ public const CONFIG_FILE_NAME = 'mf_config.php'; // Config path variable - public static $config_path; + public static string $config_path; /** - * Set up configuration path - * - * @param string $base_path + * Set up configuration path. + * @return void */ - public static function setup_config_path(string $base_path) + public static function setup_config_path(string $base_path): void { self::$config_path = $base_path.'/'.self::CONFIG_FILE_NAME; } /** - * Get configuration path + * Get configuration path. * * @return string */ - protected static function get_config_path() + protected static function get_config_path(): string { return self::$config_path; } /** - * Write configuration into a file + * Write configuration into a file. + * @return void */ - public static function write_config() + public static function write_config(): void { $path = self::get_config_path(); $str = 'getDoctrineSchemaManager(); - // get all the tables available in the database $tables = collect($schema->listTableNames())->all(); + $table_foreign_keys = []; + foreach ($tables as $table) { + $table_foreign_keys[$table] = $schema->listTableForeignKeys($table); + } $insert_tables = []; foreach ($tables as $table) { $columns = []; - $table_columns = $schema->introspectTable($table)->getColumns(); + $table_columns = $schema->listTableColumns($table); + + // Initiate new arrays for foreign keys + $foreign_keys = []; + $foreign_keys_reverse = []; + + // Check foreign key references from this table + $foreign_keys_list = $table_foreign_keys[$table]; + foreach ($foreign_keys_list as $fk) { + $foreign_keys[$fk->getLocalColumns()[0]] = [ + 'foreign_table' => $fk->getForeignTableName(), + 'foreign_column' => $fk->getForeignColumns()[0], + ]; + } foreach ($table_columns as $column) { $full_class = get_class($column->getType()); @@ -131,24 +150,40 @@ ], ]; } - + // Check foreign key references to this table + foreach ($tables as $other_table) { + if ($other_table != $table) { + $foreign_keys_list = $table_foreign_keys[$other_table]; + foreach ($foreign_keys_list as $fk) { + if ($fk->getForeignTableName() == $table) { + $foreign_keys_reverse[] = [ + 'table' => $other_table, + 'column' => $fk->getLocalColumns()[0], + ]; + } + } + } + } $insert_tables[$table] = []; $insert_tables[$table]['columns'] = $columns; + $insert_tables[$table]['foreign_keys'] = $foreign_keys; // Foreign keys FROM this table + $insert_tables[$table]['foreign_keys_reverse'] = $foreign_keys_reverse; // Foreign keys TO this table $insert_tables[$table]['type'] = 'default'; } - // Merge the new tables configuration into the initial config + self::merge_array_priority(self::$config['tables'], $insert_tables); return $tables; } /** - * Merge two arrays and ensure priority values do not get overwritten + * Merge two arrays and ensure priority values do not get overwritten. * * @param array $priority * @param array $merged + * @return void */ - private static function merge_array_priority(&$priority, $merged) + private static function merge_array_priority(&$priority, $merged): void { foreach ($merged as $key => $value) { // if the priority key is not set, automatically add the merged values diff -r a9ff874afdbd -r 3426c7e91c24 src/Generator/Controller/stubs/controller.stub --- a/src/Generator/Controller/stubs/controller.stub Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Generator/Controller/stubs/controller.stub Wed Apr 24 19:53:42 2024 -0400 @@ -41,7 +41,7 @@ ${{ modelVariable }} = new {{ model }}(); //insert the values into the model - // {{ valuesForCreation }} + ${{ modelVariable }}->map_values($validated); ${{ modelVariable }}->save(); @@ -80,7 +80,7 @@ $validated = $request->validated(); // Set the variables - //{{ valuesForCreation }} + ${{ modelVariable }}->map_values($validated); ${{ modelVariable }}->save(); diff -r a9ff874afdbd -r 3426c7e91c24 src/Generator/Model/ModelGenerator.php --- a/src/Generator/Model/ModelGenerator.php Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Generator/Model/ModelGenerator.php Wed Apr 24 19:53:42 2024 -0400 @@ -51,7 +51,7 @@ * Resolve the fully-qualified path to the stub. * * @param string $stub - * + * * @return string */ protected function resolveStubPath($stub) diff -r a9ff874afdbd -r 3426c7e91c24 src/Generator/Model/stubs/model.stub --- a/src/Generator/Model/stubs/model.stub Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Generator/Model/stubs/model.stub Wed Apr 24 19:53:42 2024 -0400 @@ -40,4 +40,13 @@ $item->updated_by = \Auth::user()->id; }); } + + + //relations + + // BelongsTo + + // HasMany + + } diff -r a9ff874afdbd -r 3426c7e91c24 src/Generator/Requests/stubs/request.stub --- a/src/Generator/Requests/stubs/request.stub Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Generator/Requests/stubs/request.stub Wed Apr 24 19:53:42 2024 -0400 @@ -22,7 +22,7 @@ public function rules(): array { return [ - // + // {{ valuesForValidation }} ]; } } diff -r a9ff874afdbd -r 3426c7e91c24 src/Replacer/Replacer.php --- a/src/Replacer/Replacer.php Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Replacer/Replacer.php Wed Apr 24 19:53:42 2024 -0400 @@ -89,8 +89,8 @@ */ public function model_variable(string $name): string { - /* return Str::singular($name); */ - return 'item'; + return Str::singular($name); + /* return 'item'; */ } /** diff -r a9ff874afdbd -r 3426c7e91c24 src/Replacer/TableReplacer.php --- a/src/Replacer/TableReplacer.php Sat Dec 02 10:20:32 2023 -0500 +++ b/src/Replacer/TableReplacer.php Wed Apr 24 19:53:42 2024 -0400 @@ -29,6 +29,26 @@ return $insert; } + protected function getAttributes() + { + $insert = ''; + foreach ($this->get_columns() as $column) { + $insert .= "'".$column->getName()."' => '',\n"; + } + + return $insert; + } + + protected function getValuesForValidation() + { + $insert = ''; + foreach ($this->get_columns() as $column) { + $insert .= "'".$column->getName()."' => 'nullable',\n"; + } + + return $insert; + } + public function apply_inserts(string $target): string { $inserts = $this->get_all_keywords($target); @@ -48,7 +68,9 @@ $table_name = $this->getTableInput(); $replacements = [ '// {{ valuesForCreation }}' => self::getValuesForCreation(), - ]; + '# {{ atributeInsertPoint }}' => self::getAttributes(), + '// {{ valuesForValidation }}' => self::getValuesForValidation(), + ]; foreach ($replacements as $key => &$replacement) { $replacement = $replacement."\n".$key;