@@ -30,17 +30,19 @@ private function userPreferences(): MorphMany
3030 /**
3131 * Get a user's preference value or default if not set.
3232 *
33- * @param PreferenceGroup $name
34- * @param mixed|null $default Default value if preference not set.
33+ * @param PreferenceGroup|Preference $preference
34+ * @param mixed|null $default Default value if preference not set.
3535 *
3636 * @return mixed
37- * @throws PreferenceNotFoundException|AuthorizationException
37+ * @throws AuthorizationException
38+ * @throws PreferenceNotFoundException
3839 */
39- public function getPreference (PreferenceGroup $ name , mixed $ default = null ): mixed
40+ public function getPreference (PreferenceGroup | Preference $ preference , mixed $ default = null ): mixed
4041 {
42+
4143 $ this ->authorize (PolicyAction::GET );
4244
43- $ preference = $ this ->validateAndRetrievePreference ($ name );
45+ $ preference = $ this ->validateAndRetrievePreference ($ preference );
4446
4547 $ userPreference = $ this ->userPreferences ()->where ('preference_id ' , $ preference ->id )->first ();
4648
@@ -50,17 +52,18 @@ public function getPreference(PreferenceGroup $name, mixed $default = null): mix
5052 /**
5153 * Set or update a user's preference value.
5254 *
53- * @param PreferenceGroup $name
54- * @param mixed $value Value to set for the preference.
55+ * @param PreferenceGroup|Preference $preference
56+ * @param mixed $value Value to set for the preference.
5557 *
56- * @throws PreferenceNotFoundException|AuthorizationException|ValidationException
58+ * @throws AuthorizationException
59+ * @throws PreferenceNotFoundException
60+ * @throws ValidationException
5761 */
58- public function setPreference (PreferenceGroup $ name , mixed $ value ): void
62+ public function setPreference (PreferenceGroup | Preference $ preference , mixed $ value ): void
5963 {
6064 $ this ->authorize (PolicyAction::UPDATE );
6165
62-
63- $ preference = $ this ->validateAndRetrievePreference ($ name );
66+ $ preference = $ this ->validateAndRetrievePreference ($ preference );
6467
6568 $ validator = Validator::make (['value ' => $ value ], ['value ' => $ preference ->getValidationRules ()]);
6669
@@ -74,16 +77,18 @@ public function setPreference(PreferenceGroup $name, mixed $value): void
7477 /**
7578 * Remove a user's preference.
7679 *
77- * @param PreferenceGroup $name
80+ * @param PreferenceGroup|Preference $preference
7881 *
7982 * @return int Number of deleted records.
80- * @throws PreferenceNotFoundException|AuthorizationException
83+ * @throws AuthorizationException
84+ * @throws PreferenceNotFoundException
8185 */
82- public function removePreference (PreferenceGroup $ name ): int
86+ public function removePreference (PreferenceGroup | Preference $ preference ): int
8387 {
8488 $ this ->authorize (PolicyAction::DELETE );
8589
86- $ preference = $ this ->validateAndRetrievePreference ($ name );
90+ $ preference = $ this ->validateAndRetrievePreference ($ preference );
91+
8792
8893 return $ this ->userPreferences ()->where ('preference_id ' , $ preference ->id )->delete ();
8994 }
@@ -112,22 +117,27 @@ public function getPreferences(string $group = null): Collection
112117 /**
113118 * Validate existence of a preference and retrieve it.
114119 *
115- * @param PreferenceGroup $name Preference name.
120+ * @param PreferenceGroup|Preference $preference Preference name.
116121 *
117122 * @return Preference
118123 * @throws PreferenceNotFoundException If preference not found.
119124 */
120- private function validateAndRetrievePreference (PreferenceGroup $ name ): Preference
125+ private function validateAndRetrievePreference (PreferenceGroup | Preference $ preference ): Preference
121126 {
122- SerializeHelper::conformNameAndGroup ($ name , $ group );
123127
124- /**@var string $name * */
125- $ preference = Preference::where ('group ' , $ group )->where ('name ' , $ name )->first ();
128+ if (!$ preference instanceof Preference) {
129+
130+ SerializeHelper::conformNameAndGroup ($ preference , $ group );
126131
132+ /**@var Preference $preference * */
133+ $ preference = Preference::where ('group ' , $ group )->where ('name ' , $ preference )->first ();
134+ }
127135 if (!$ preference ) {
128- throw new PreferenceNotFoundException ("Preference not found: $ name in group $ group " );
136+ throw new PreferenceNotFoundException ("Preference not found: $ preference in group $ group " );
129137 }
130138
139+ //Todo Gate
140+
131141 return $ preference ;
132142 }
133143
0 commit comments