77use Illuminate \Console \Command ;
88use Illuminate \Support \Facades \File ;
99use Panchodp \LaravelAction \Actions \CreateDirectory ;
10+ use Panchodp \LaravelAction \Actions \GenerateRequest ;
1011use Panchodp \LaravelAction \Actions \ObtainNamespace ;
1112use Panchodp \LaravelAction \Actions \PreparePath ;
1213use Panchodp \LaravelAction \Actions \PrepareStub ;
@@ -20,9 +21,20 @@ final class MakeActionCommand extends Command
2021{
2122 protected $ signature = 'make:action {name} {subfolder?}
2223 {--t : Make a DB transaction action }
23- {--tu : Make a DB transaction action }
24- {--ut : Make a DB transaction action }
25- {--u : Make a User injection} ' ;
24+ {--u : Make a User injection}
25+ {--r : Generate a Request class and inject it into the action}
26+ {--tu : Make a DB transaction action with User injection}
27+ {--ut : Make a DB transaction action with User injection}
28+ {--tr : Make a DB transaction action with Request injection}
29+ {--rt : Make a DB transaction action with Request injection}
30+ {--ur : Make a User injection with Request injection}
31+ {--ru : Make a User injection with Request injection}
32+ {--tur : Make a DB transaction action with User and Request injection}
33+ {--tru : Make a DB transaction action with User and Request injection}
34+ {--utr : Make a DB transaction action with User and Request injection}
35+ {--urt : Make a DB transaction action with User and Request injection}
36+ {--rtu : Make a DB transaction action with User and Request injection}
37+ {--rut : Make a DB transaction action with User and Request injection} ' ;
2638
2739 protected $ description = 'Create a new action class ' ;
2840
@@ -37,6 +49,12 @@ public function handle(): int
3749 $ input = $ this ->processInputs ();
3850 $ config = $ this ->validateAndPrepareConfig ($ input );
3951 $ this ->createDirectoryStructure ($ config );
52+
53+ // Generate Request class if --r flag is present
54+ if ($ config ['rFlag ' ] ?? false ) {
55+ $ this ->generateRequestFile ($ config );
56+ }
57+
4058 $ this ->generateActionFile ($ config );
4159 $ this ->displaySuccessMessages ($ config );
4260
@@ -50,6 +68,7 @@ public function handle(): int
5068
5169 /**
5270 * Process and sanitize command inputs.
71+ *
5372 * @return array<string, mixed>
5473 */
5574 private function processInputs (): array
@@ -60,28 +79,38 @@ private function processInputs(): array
6079 $ subfolder = $ this ->argument ('subfolder ' );
6180 $ subfolder = is_string ($ subfolder ) ? mb_trim ($ subfolder , '/ \\' ) : '' ;
6281
63- $ tuFlag = (bool ) ($ this ->option ('tu ' ) || $ this ->option ('ut ' ));
64- $ tFlag = (bool ) ($ this ->option ('t ' ) || $ tuFlag );
65- $ uFlag = (bool ) ($ this ->option ('u ' ) || $ tuFlag );
82+ // Check for combination flags first
83+ $ turFlag = (bool ) ($ this ->option ('tur ' ) || $ this ->option ('tru ' ) ||
84+ $ this ->option ('utr ' ) || $ this ->option ('urt ' ) ||
85+ $ this ->option ('rtu ' ) || $ this ->option ('rut ' ));
86+
87+ $ tuFlag = (bool ) ($ this ->option ('tu ' ) || $ this ->option ('ut ' ) || $ turFlag );
88+ $ trFlag = (bool ) ($ this ->option ('tr ' ) || $ this ->option ('rt ' ) || $ turFlag );
89+ $ urFlag = (bool ) ($ this ->option ('ur ' ) || $ this ->option ('ru ' ) || $ turFlag );
90+
91+ // Individual flags or derived from combinations
92+ $ tFlag = (bool ) ($ this ->option ('t ' ) || $ tuFlag || $ trFlag );
93+ $ uFlag = (bool ) ($ this ->option ('u ' ) || $ tuFlag || $ urFlag );
94+ $ rFlag = (bool ) ($ this ->option ('r ' ) || $ trFlag || $ urFlag );
6695
6796 return [
6897 'name ' => $ name ,
6998 'subfolder ' => $ subfolder ,
70- 'tuFlag ' => $ tuFlag ,
7199 'tFlag ' => $ tFlag ,
72100 'uFlag ' => $ uFlag ,
101+ 'rFlag ' => $ rFlag ,
73102 ];
74103 }
75104
76105 /**
77- * @param array<string, mixed> $input
106+ * @param array<string, mixed> $input
78107 * @return array<string, mixed>
79108 */
80109 private function validateAndPrepareConfig (array $ input ): array
81110 {
82111 $ name = is_string ($ input ['name ' ]) ? $ input ['name ' ] : '' ;
83112 $ subfolder = is_string ($ input ['subfolder ' ]) ? $ input ['subfolder ' ] : '' ;
84-
113+
85114 ValidateName::handle ($ name );
86115
87116 // Security: Validate configuration values
@@ -111,7 +140,7 @@ private function validateAndPrepareConfig(array $input): array
111140 }
112141
113142 /**
114- * @param array<string, mixed> $config
143+ * @param array<string, mixed> $config
115144 */
116145 private function createDirectoryStructure (array $ config ): void
117146 {
@@ -121,27 +150,38 @@ private function createDirectoryStructure(array $config): void
121150
122151 $ path = is_string ($ config ['path ' ]) ? $ config ['path ' ] : '' ;
123152 $ relativePath = is_string ($ config ['relative_path ' ]) ? $ config ['relative_path ' ] : '' ;
124-
153+
125154 CreateDirectory::handle ($ path , $ permissions );
126155 $ this ->info ("Directory {$ relativePath } created successfully... " );
127156 }
128157
129158 /**
130- * @param array<string, mixed> $config
159+ * @param array<string, mixed> $config
160+ */
161+ private function generateRequestFile (array $ config ): void
162+ {
163+ $ filename = is_string ($ config ['filename ' ]) ? $ config ['filename ' ] : '' ;
164+
165+ $ requestName = GenerateRequest::handle ($ filename );
166+ $ this ->info ("Request {$ requestName } created successfully... " );
167+ }
168+
169+ /**
170+ * @param array<string, mixed> $config
131171 */
132172 private function generateActionFile (array $ config ): void
133173 {
134- $ tuFlag = is_bool ($ config ['tuFlag ' ]) ? $ config ['tuFlag ' ] : false ;
135174 $ tFlag = is_bool ($ config ['tFlag ' ]) ? $ config ['tFlag ' ] : false ;
136175 $ uFlag = is_bool ($ config ['uFlag ' ]) ? $ config ['uFlag ' ] : false ;
176+ $ rFlag = is_bool ($ config ['rFlag ' ]) ? $ config ['rFlag ' ] : false ;
137177 $ filename = is_string ($ config ['filename ' ]) ? $ config ['filename ' ] : '' ;
138178 $ namespace = is_string ($ config ['namespace ' ]) ? $ config ['namespace ' ] : '' ;
139179 $ path = is_string ($ config ['path ' ]) ? $ config ['path ' ] : '' ;
140-
180+
141181 $ stub = PrepareStub::handle (
142- $ tuFlag ,
143182 $ tFlag ,
144183 $ uFlag ,
184+ $ rFlag ,
145185 $ filename ,
146186 $ namespace
147187 );
@@ -150,15 +190,28 @@ private function generateActionFile(array $config): void
150190 }
151191
152192 /**
153- * @param array<string, mixed> $config
193+ * @param array<string, mixed> $config
154194 */
155195 private function displaySuccessMessages (array $ config ): void
156196 {
157197 $ tFlag = is_bool ($ config ['tFlag ' ]) ? $ config ['tFlag ' ] : false ;
198+ $ uFlag = is_bool ($ config ['uFlag ' ]) ? $ config ['uFlag ' ] : false ;
199+ $ rFlag = is_bool ($ config ['rFlag ' ]) ? $ config ['rFlag ' ] : false ;
158200 $ filename = is_string ($ config ['filename ' ]) ? $ config ['filename ' ] : '' ;
159201 $ relativePath = is_string ($ config ['relative_path ' ]) ? $ config ['relative_path ' ] : '' ;
160-
161- $ transaction = $ tFlag ? ' with DB transaction ' : '. ' ;
162- $ this ->info ("Action {$ filename } created successfully at app/ {$ relativePath } folder " .$ transaction );
202+
203+ $ features = [];
204+ if ($ tFlag ) {
205+ $ features [] = 'DB transaction ' ;
206+ }
207+ if ($ uFlag ) {
208+ $ features [] = 'User injection ' ;
209+ }
210+ if ($ rFlag ) {
211+ $ features [] = 'Request injection ' ;
212+ }
213+
214+ $ featuresText = empty ($ features ) ? '. ' : ' with ' .implode (', ' , $ features ).'. ' ;
215+ $ this ->info ("Action {$ filename } created successfully at app/ {$ relativePath } folder {$ featuresText }" );
163216 }
164217}
0 commit comments