9
9
use Matteoc99 \LaravelPreference \Contracts \CastableEnum ;
10
10
use Matteoc99 \LaravelPreference \Contracts \PreferenceGroup ;
11
11
use Matteoc99 \LaravelPreference \Enums \Cast ;
12
+ use Matteoc99 \LaravelPreference \Exceptions \InvalidStateException ;
13
+ use Matteoc99 \LaravelPreference \Factory \builders \BaseBuilder ;
12
14
use Matteoc99 \LaravelPreference \Factory \builders \ObjectPreferenceBuilder ;
13
15
use Matteoc99 \LaravelPreference \Factory \builders \PrimitivePreferenceBuilder ;
14
16
use Matteoc99 \LaravelPreference \Models \Preference ;
@@ -28,6 +30,7 @@ class PreferenceBuilder
28
30
*
29
31
* @return void Creates the preference and commits it to the database.
30
32
*
33
+ * @throws InvalidStateException
31
34
* @example
32
35
* ```
33
36
* PreferenceBuilder::buildString(UserPreference::TEST, "default");
@@ -36,7 +39,7 @@ class PreferenceBuilder
36
39
*/
37
40
public static function buildString (PreferenceGroup $ name , string $ default = null ): void
38
41
{
39
- self ::init ($ name )->nullable ()->withDefaultValue (null )->create ();
42
+ self ::init ($ name )->nullable ()->withDefaultValue ($ default )->create ();
40
43
}
41
44
42
45
/**
@@ -49,6 +52,7 @@ public static function buildString(PreferenceGroup $name, string $default = null
49
52
*
50
53
* @return void Creates the preference and commits it to the database.
51
54
*
55
+ * @throws InvalidStateException
52
56
* @example
53
57
* ```
54
58
* PreferenceBuilder::buildArray(new SettingsPreferenceGroup(), ["item1", "item2"]);
@@ -58,7 +62,7 @@ public static function buildString(PreferenceGroup $name, string $default = null
58
62
*/
59
63
public static function buildArray (PreferenceGroup $ name , array $ default = null ): void
60
64
{
61
- self ::init ($ name , Cast::ARRAY )->nullable ()->withDefaultValue (null )->create ();
65
+ self ::init ($ name , Cast::ARRAY )->nullable ()->withDefaultValue ($ default )->create ();
62
66
}
63
67
64
68
@@ -99,7 +103,7 @@ public static function init(PreferenceGroup $name, CastableEnum $cast = Cast::ST
99
103
*
100
104
* @param PreferenceGroup $name
101
105
*
102
- * @return int,
106
+ * @return int
103
107
*/
104
108
public static function delete (PreferenceGroup $ name ): int
105
109
{
@@ -148,7 +152,23 @@ public static function initBulk(array $preferences, bool $nullable = false): voi
148
152
throw new InvalidArgumentException ("no preferences provided " );
149
153
}
150
154
151
- foreach ($ preferences as $ index => &$ preferenceData ) {
155
+ $ cleanPreferences = [];
156
+
157
+ foreach ($ preferences as $ index => $ preferenceData ) {
158
+
159
+ if ($ preferenceData instanceof BaseBuilder) {
160
+ if ($ preferenceData ->isStateSet (BaseBuilder::STATE_CREATED )) {
161
+ throw new InvalidStateException ($ preferenceData ->getState ()
162
+ , "The State should not be Created at this point, as its initBulk responsibility " );
163
+ }
164
+ if (!$ preferenceData ->isStateSet (BaseBuilder::STATE_NULLABLE_SET )) {
165
+ $ preferenceData ->nullable ($ nullable );
166
+ }
167
+
168
+ $ preferenceData ->updateOrCreate ();
169
+ continue ;
170
+ }
171
+
152
172
if (empty ($ preferenceData ['cast ' ])) {
153
173
$ preferenceData ['cast ' ] = Cast::STRING ;
154
174
}
@@ -177,7 +197,7 @@ public static function initBulk(array $preferences, bool $nullable = false): voi
177
197
$ preferenceData ['cast ' ] = serialize ($ preferenceData ['cast ' ]);
178
198
179
199
// Ensure Defaults
180
- $ preferenceData = array_merge ([
200
+ $ preferenceData = array_merge ([
181
201
'group ' => 'general ' ,
182
202
'default_value ' => null ,
183
203
'allowed_values ' => null ,
@@ -186,9 +206,10 @@ public static function initBulk(array $preferences, bool $nullable = false): voi
186
206
'rule ' => null ,
187
207
'nullable ' => false ,
188
208
], $ preferenceData );
209
+ $ cleanPreferences [] = $ preferenceData ;
189
210
}
190
211
191
- Preference::upsert ($ preferences , ['name ' , 'group ' ]);
212
+ Preference::upsert ($ cleanPreferences , ['name ' , 'group ' ]);
192
213
}
193
214
194
215
/**
@@ -203,6 +224,7 @@ public static function initBulk(array $preferences, bool $nullable = false): voi
203
224
* @return int Returns the number of deleted preferences.
204
225
*
205
226
* @throws InvalidArgumentException if the preferences array is empty or if any preference lacks a required
227
+ * @throws InvalidStateException
206
228
* 'name' field, or if the 'name' field does not implement PreferenceGroup.
207
229
*/
208
230
public static function deleteBulk (array $ preferences ): int
@@ -213,6 +235,18 @@ public static function deleteBulk(array $preferences): int
213
235
$ query = Preference::query ();
214
236
215
237
foreach ($ preferences as $ index => $ preferenceData ) {
238
+
239
+
240
+ if ($ preferenceData instanceof BaseBuilder) {
241
+ if ($ preferenceData ->isStateSet (BaseBuilder::STATE_DELETED )) {
242
+ throw new InvalidStateException ($ preferenceData ->getState ()
243
+ , "The State should not be Deleted at this point, as its deleteBulk's responsibility " );
244
+ }
245
+
246
+ $ preferenceData ->delete ();
247
+ continue ;
248
+ }
249
+
216
250
if (empty ($ preferenceData ['name ' ]) || !($ preferenceData ['name ' ] instanceof PreferenceGroup)) {
217
251
throw new InvalidArgumentException (
218
252
sprintf ("index: #%s name is required and must implement PreferenceGroup " , $ index )
0 commit comments