diff --git a/app/Http/Controllers/Api/EmojiAliasController.php b/app/Http/Controllers/Api/EmojiAliasController.php index a0b04796d..803f88645 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\SearchEmojiAliasRequest; use App\Http\Requests\Emoji\StoreEmojiAliasRequest; use App\Http\Requests\Emoji\UpdateEmojiAliasRequest; use App\Http\Resources\EmojiAliasResource; @@ -91,13 +92,8 @@ class EmojiAliasController extends Controller /** * Search aliases using Laravel Scout. */ - public function search(Request $request) + public function search(SearchEmojiAliasRequest $request) { - $request->validate([ - 'q' => 'required|string|min:1', - 'limit' => 'integer|min:1|max:100', - ]); - $aliases = EmojiAlias::search($request->get('q')) ->take($request->get('limit', 20)) ->get(); diff --git a/app/Http/Controllers/Api/EmojiController.php b/app/Http/Controllers/Api/EmojiController.php index a5e24c7be..a3c07f3d5 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\SearchEmojiRequest; use App\Http\Requests\Emoji\StoreEmojiRequest; use App\Http\Requests\Emoji\UpdateEmojiRequest; use App\Http\Resources\EmojiResource; @@ -95,24 +96,17 @@ class EmojiController extends Controller /** * Search emojis using Laravel Scout. */ - public function search(Request $request) + public function search(SearchEmojiRequest $request) { - $request->validate([ - 'q' => 'required|string|min:1', - 'limit' => 'integer|min:1|max:100', - ]); - $emojis = Emoji::search($request->get('q')) ->take($request->get('limit', 20)) ->get(); // Load relationships if requested - if ($request->get('with_category')) { - $emojis->load('category'); - } - if ($request->get('with_aliases')) { - $emojis->load('aliases'); - } + $emojis->load(array_filter([ + $request->get('with_category') ? 'category' : null, + $request->get('with_aliases') ? 'aliases' : null, + ])); return EmojiResource::collection($emojis); } diff --git a/app/Http/Requests/Emoji/SearchEmojiAliasRequest.php b/app/Http/Requests/Emoji/SearchEmojiAliasRequest.php new file mode 100644 index 000000000..795561e2a --- /dev/null +++ b/app/Http/Requests/Emoji/SearchEmojiAliasRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'q' => 'required|string|min:1', + 'limit' => 'integer|min:1|max:100', + ]; + } +} diff --git a/app/Http/Requests/Emoji/SearchEmojiRequest.php b/app/Http/Requests/Emoji/SearchEmojiRequest.php new file mode 100644 index 000000000..37fdafc4f --- /dev/null +++ b/app/Http/Requests/Emoji/SearchEmojiRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'q' => 'required|string|min:1', + 'limit' => 'integer|min:1|max:100', + ]; + } +} diff --git a/database/seeders/EmojiSeeder.php b/database/seeders/EmojiSeeder.php index c3e276422..6ae9830d4 100644 --- a/database/seeders/EmojiSeeder.php +++ b/database/seeders/EmojiSeeder.php @@ -93,9 +93,9 @@ class EmojiSeeder extends Seeder ]; // Insert emojis - $displayOrder = 0; foreach ($emojis as $categoryData) { $category = $categoryModels[$categoryData['category']]; + $displayOrder = 0; foreach ($categoryData['emojis'] as $emojiData) { $displayOrder++; diff --git a/tests/Feature/Api/EmojiCategoryTest.php b/tests/Feature/Api/EmojiCategoryTest.php index 09f35b77a..5ce649a63 100644 --- a/tests/Feature/Api/EmojiCategoryTest.php +++ b/tests/Feature/Api/EmojiCategoryTest.php @@ -25,8 +25,18 @@ describe('Emoji Category API Endpoints', function () { }); test('can list categories with emoji counts', function () { - $category1 = EmojiCategory::factory()->create(['title' => 'Category 1']); - $category2 = EmojiCategory::factory()->create(['title' => 'Category 2']); + // Ensure we start with clean slate + EmojiCategory::query()->delete(); + Emoji::query()->delete(); + + $category1 = EmojiCategory::factory()->create([ + 'title' => 'Category 1', + 'display_order' => 1, + ]); + $category2 = EmojiCategory::factory()->create([ + 'title' => 'Category 2', + 'display_order' => 2, + ]); Emoji::factory()->count(5)->create(['emoji_category_id' => $category1->id]); Emoji::factory()->count(3)->create(['emoji_category_id' => $category2->id]);