mirror of
https://github.com/torrentpier/torrentpier
synced 2025-08-21 22:03:49 -07:00
feat(emoji): implement search request validation for emojis and aliases
Added new form request classes, SearchEmojiRequest and SearchEmojiAliasRequest, to handle validation for search queries in the Emoji and EmojiAlias controllers. Updated the search methods in both controllers to utilize these new request classes, improving code organization and validation consistency. Additionally, refactored the loading of relationships in the EmojiController for better readability.
This commit is contained in:
parent
6c491be4e9
commit
e424120c24
6 changed files with 79 additions and 21 deletions
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
29
app/Http/Requests/Emoji/SearchEmojiAliasRequest.php
Normal file
29
app/Http/Requests/Emoji/SearchEmojiAliasRequest.php
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Emoji;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class SearchEmojiAliasRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'q' => 'required|string|min:1',
|
||||
'limit' => 'integer|min:1|max:100',
|
||||
];
|
||||
}
|
||||
}
|
29
app/Http/Requests/Emoji/SearchEmojiRequest.php
Normal file
29
app/Http/Requests/Emoji/SearchEmojiRequest.php
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Emoji;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class SearchEmojiRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'q' => 'required|string|min:1',
|
||||
'limit' => 'integer|min:1|max:100',
|
||||
];
|
||||
}
|
||||
}
|
|
@ -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++;
|
||||
|
|
|
@ -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]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue