22
33namespace Lomkit \Rest \Http \Requests ;
44
5- use Illuminate \Validation \Rule ;
6- use Lomkit \Rest \Http \Resource ;
7- use Lomkit \Rest \Rules \ArrayWith ;
8- use Lomkit \Rest \Rules \CustomRulable ;
5+ use Lomkit \Rest \Rules \MutateRules ;
96
107class MutateRequest extends RestRequest
118{
@@ -19,94 +16,13 @@ class MutateRequest extends RestRequest
1916 */
2017 public function rules ()
2118 {
22- return $ this ->mutateRules ($ this ->route ()->controller ::newResource ());
23- }
24-
25- /**
26- * Define the validation rules for mutating resources.
27- *
28- * @param resource $resource
29- * @param string $prefix
30- * @param array $loadedRelations
31- *
32- * @return array
33- *
34- * This method specifies the validation rules for resource mutations, including create, update, attach, or detach.
35- * It includes rules for the operation type, attributes, keys, and custom rules.
36- */
37- public function mutateRules (Resource $ resource , $ prefix = 'mutate.* ' , $ loadedRelations = [])
38- {
39- return array_merge (
40- [
41- $ prefix .'.operation ' => [
42- 'required_with: ' .$ prefix ,
43- Rule::in ('create ' , 'update ' , ...($ prefix === '' ? [] : ['attach ' , 'detach ' ])),
44- ],
45- $ prefix .'.attributes ' => [
46- 'prohibited_if: ' .$ prefix .'.operation,attach ' ,
47- 'prohibited_if: ' .$ prefix .'.operation,detach ' ,
48- new ArrayWith ($ resource ->getFields ($ this )),
49- ],
50- $ prefix .'.key ' => [
51- 'required_if: ' .$ prefix .'.operation,update ' ,
52- 'required_if: ' .$ prefix .'.operation,attach ' ,
53- 'required_if: ' .$ prefix .'.operation,detach ' ,
54- 'prohibited_if: ' .$ prefix .'.operation,create ' ,
55- 'exists: ' .$ resource ::newModel ()->getTable ().', ' .$ resource ::newModel ()->getKeyName (),
56- ],
57- $ prefix => [
58- CustomRulable::make ()->resource ($ resource ),
59- ],
60- ],
61- $ this ->relationRules ($ resource , $ prefix .'.relations ' , $ loadedRelations )
62- );
63- }
64-
65- /**
66- * Define relation-specific validation rules for mutations.
67- *
68- * @param resource $resource
69- * @param string $prefix
70- * @param array $loadedRelations
71- *
72- * @return array
73- *
74- * This protected method specifies validation rules for resource relations during mutations.
75- * It ensures that relations are properly validated for the given operation type.
76- */
77- protected function relationRules (Resource $ resource , string $ prefix = '' , $ loadedRelations = [])
78- {
79- $ resourceRelationsNotLoaded = collect ($ resource ->getRelations ($ this ))
80- ->filter (function ($ relation ) use ($ loadedRelations ) {
81- return !in_array ($ relation ->relation , $ loadedRelations );
82- });
83-
84- $ rules = [
85- $ prefix => [
86- new ArrayWith (
87- $ resourceRelationsNotLoaded ->map (function ($ resourceRelationNotLoaded ) {
88- return $ resourceRelationNotLoaded ->relation ;
89- })->toArray ()
90- ),
91- ],
19+ return [
20+ 'mutate.* ' => new MutateRules (
21+ $ this ->route ()->controller ::newResource (),
22+ $ this ,
23+ null ,
24+ true
25+ ),
9226 ];
93-
94- foreach (
95- $ resourceRelationsNotLoaded as $ relation
96- ) {
97- $ prefixRelation = $ prefix .'. ' .$ relation ->relation ;
98-
99- if ($ relation ->hasMultipleEntries ()) {
100- $ prefixRelation .= '.* ' ;
101- }
102-
103- $ rules = array_merge_recursive (
104- $ rules ,
105- $ relation ->rules ($ resource , $ prefix .'. ' .$ relation ->relation ),
106- $ this ->mutateRules ($ relation ->resource (), $ prefixRelation , array_merge ($ loadedRelations , [$ relation ->relation ]))
107- );
108- }
109-
110- return $ rules ;
11127 }
11228}
0 commit comments