From de856d38c01e0efe41750cd9c6bbeb1eb570572e Mon Sep 17 00:00:00 2001 From: Yury Pikhtarev Date: Wed, 2 Jul 2025 17:42:42 +0400 Subject: [PATCH] feat(emoji): add request validation for emoji and alias indexing Introduced new form request classes, IndexEmojiRequest and IndexEmojiAliasRequest, to handle validation for indexing requests in the Emoji and EmojiAlias controllers. Updated the index methods in both controllers to utilize these new request classes, enhancing validation and code organization. This change improves the overall structure and maintainability of the emoji management system. --- .../Controllers/Api/EmojiAliasController.php | 3 +- app/Http/Controllers/Api/EmojiController.php | 3 +- .../Requests/Emoji/IndexEmojiAliasRequest.php | 44 +++++++++++++++++ app/Http/Requests/Emoji/IndexEmojiRequest.php | 49 +++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 app/Http/Requests/Emoji/IndexEmojiAliasRequest.php create mode 100644 app/Http/Requests/Emoji/IndexEmojiRequest.php diff --git a/app/Http/Controllers/Api/EmojiAliasController.php b/app/Http/Controllers/Api/EmojiAliasController.php index 803f88645..b7237c8d6 100644 --- a/app/Http/Controllers/Api/EmojiAliasController.php +++ b/app/Http/Controllers/Api/EmojiAliasController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use App\Http\Requests\Emoji\IndexEmojiAliasRequest; use App\Http\Requests\Emoji\SearchEmojiAliasRequest; use App\Http\Requests\Emoji\StoreEmojiAliasRequest; use App\Http\Requests\Emoji\UpdateEmojiAliasRequest; @@ -15,7 +16,7 @@ class EmojiAliasController extends Controller /** * Display a listing of the resource. */ - public function index(Request $request) + public function index(IndexEmojiAliasRequest $request) { $aliases = EmojiAlias::query() ->when($request->get('emoji_id'), function ($query, $emojiId) { diff --git a/app/Http/Controllers/Api/EmojiController.php b/app/Http/Controllers/Api/EmojiController.php index a3c07f3d5..9357208f2 100644 --- a/app/Http/Controllers/Api/EmojiController.php +++ b/app/Http/Controllers/Api/EmojiController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use App\Http\Requests\Emoji\IndexEmojiRequest; use App\Http\Requests\Emoji\SearchEmojiRequest; use App\Http\Requests\Emoji\StoreEmojiRequest; use App\Http\Requests\Emoji\UpdateEmojiRequest; @@ -15,7 +16,7 @@ class EmojiController extends Controller /** * Display a listing of the resource. */ - public function index(Request $request) + public function index(IndexEmojiRequest $request) { $emojis = Emoji::query() ->when($request->get('category_id'), function ($query, $categoryId) { diff --git a/app/Http/Requests/Emoji/IndexEmojiAliasRequest.php b/app/Http/Requests/Emoji/IndexEmojiAliasRequest.php new file mode 100644 index 000000000..c529a7cd1 --- /dev/null +++ b/app/Http/Requests/Emoji/IndexEmojiAliasRequest.php @@ -0,0 +1,44 @@ +|string> + */ + public function rules(): array + { + return [ + 'emoji_id' => 'sometimes|integer|exists:emojis,id', + 'search' => 'sometimes|string|max:255', + 'per_page' => 'sometimes|integer|min:1|max:100', + 'with_emoji' => 'sometimes|boolean', + ]; + } + + /** + * Prepare the data for validation. + */ + protected function prepareForValidation(): void + { + // Convert string boolean values to actual booleans + if ($this->has('with_emoji')) { + $this->merge([ + 'with_emoji' => filter_var($this->with_emoji, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + ]); + } + } +} diff --git a/app/Http/Requests/Emoji/IndexEmojiRequest.php b/app/Http/Requests/Emoji/IndexEmojiRequest.php new file mode 100644 index 000000000..6a0739221 --- /dev/null +++ b/app/Http/Requests/Emoji/IndexEmojiRequest.php @@ -0,0 +1,49 @@ +|string> + */ + public function rules(): array + { + return [ + 'category_id' => 'sometimes|integer|exists:emoji_categories,id', + 'search' => 'sometimes|string|max:255', + 'per_page' => 'sometimes|integer|min:1|max:100', + 'with_category' => 'sometimes|boolean', + 'with_aliases' => 'sometimes|boolean', + ]; + } + + /** + * Prepare the data for validation. + */ + protected function prepareForValidation(): void + { + // Convert string boolean values to actual booleans + $booleanFields = ['with_category', 'with_aliases']; + + foreach ($booleanFields as $field) { + if ($this->has($field)) { + $this->merge([ + $field => filter_var($this->get($field), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + ]); + } + } + } +}