4
4
5
5
use Illuminate \Database \Eloquent \Builder ;
6
6
use Illuminate \Support \Arr ;
7
- use Illuminate \Support \Facades \Log ;
8
7
use Voice \JsonQueryBuilder \Config \ModelConfig ;
9
8
use Voice \JsonQueryBuilder \Config \RequestParametersConfig ;
10
9
use Voice \JsonQueryBuilder \Exceptions \SearchException ;
11
10
use Voice \JsonQueryBuilder \RequestParameters \AbstractParameter ;
12
11
13
12
class JsonQuery
14
13
{
15
- protected Builder $ builder ;
16
- protected array $ input ;
17
- protected ModelConfig $ modelConfig ;
18
- protected RequestParametersConfig $ requestParametersConfig ;
14
+ protected Builder $ builder ;
15
+ protected array $ input ;
16
+ protected ModelConfig $ modelConfig ;
17
+ protected array $ registeredParameters ;
19
18
20
19
/*
21
20
* TODO: datum od danas toliko dana
@@ -33,12 +32,20 @@ public function __construct(Builder $builder, array $input)
33
32
$ this ->builder = $ builder ;
34
33
$ this ->input = $ input ;
35
34
35
+ $ this ->forbidForExistingModels ();
36
+
37
+ $ this ->modelConfig = new ModelConfig ($ this ->builder ->getModel ());
38
+ $ this ->registeredParameters = (new RequestParametersConfig ())->registered ;
39
+ }
40
+
41
+ /**
42
+ * @throws SearchException
43
+ */
44
+ protected function forbidForExistingModels (): void
45
+ {
36
46
if ($ this ->builder ->getModel ()->exists ) {
37
47
throw new SearchException ("[Search] Searching is not allowed on already loaded models. " );
38
48
}
39
-
40
- $ this ->modelConfig = new ModelConfig ($ builder ->getModel ());
41
- $ this ->requestParametersConfig = new RequestParametersConfig ();
42
49
}
43
50
44
51
/**
@@ -50,7 +57,6 @@ public function search(): void
50
57
{
51
58
$ this ->appendParameterQueries ();
52
59
$ this ->appendConfigQueries ();
53
- Log::info ('[Search] SQL: ' . $ this ->builder ->toSql () . " Bindings: " . implode (', ' , $ this ->builder ->getBindings ()));
54
60
}
55
61
56
62
/**
@@ -60,14 +66,15 @@ public function search(): void
60
66
*/
61
67
protected function appendParameterQueries (): void
62
68
{
63
- foreach ($ this ->requestParametersConfig ->registered as $ requestParameter ) {
64
- $ requestParameter = $ this ->instantiateRequestParameter ($ requestParameter );
69
+ foreach ($ this ->registeredParameters as $ requestParameter ) {
65
70
66
- if (!($ this ->parameterExists ($ requestParameter ))) {
71
+ if (!$ this ->parameterExists ($ requestParameter )) {
72
+ // append config query?
67
73
continue ;
68
74
}
69
75
70
- $ requestParameter ->run ();
76
+ $ this ->instantiateRequestParameter ($ requestParameter )
77
+ ->run ();
71
78
}
72
79
}
73
80
@@ -79,13 +86,41 @@ protected function appendConfigQueries(): void
79
86
// TODO: implement...or not
80
87
}
81
88
89
+ /**
90
+ * @param string $requestParameter
91
+ * @return bool
92
+ */
93
+ protected function parameterExists (string $ requestParameter ): bool
94
+ {
95
+ /**
96
+ * @var AbstractParameter $requestParameter
97
+ */
98
+ return Arr::has ($ this ->input , $ requestParameter ::getParameterName ());
99
+ }
100
+
101
+ /**
102
+ * @param $requestParameter
103
+ * @return AbstractParameter
104
+ */
82
105
protected function instantiateRequestParameter ($ requestParameter ): AbstractParameter
83
106
{
84
- return new $ requestParameter ($ this ->input , $ this ->builder , $ this ->modelConfig );
107
+ /**
108
+ * @var AbstractParameter $requestParameter
109
+ */
110
+ $ input = $ this ->wrapInput ($ requestParameter ::getParameterName ());
111
+ return new $ requestParameter ($ input , $ this ->builder , $ this ->modelConfig );
85
112
}
86
113
87
- protected function parameterExists (AbstractParameter $ requestParameter ): bool
114
+ /**
115
+ * Get input for given parameter name and wrap it as an array if it's not already an array.
116
+ *
117
+ * @param string $parameterName
118
+ * @return array
119
+ */
120
+ protected function wrapInput (string $ parameterName ): array
88
121
{
89
- return Arr::has ($ this ->input , $ requestParameter ->getParameterName ());
122
+ return Arr::wrap (
123
+ Arr::get ($ this ->input , $ parameterName )
124
+ );
90
125
}
91
126
}
0 commit comments