From 40c538212fd9d8f6bd27d9c0b0f34ab709e1749e Mon Sep 17 00:00:00 2001 From: A1Gard Date: Mon, 24 Jun 2024 21:08:32 +0330 Subject: [PATCH] added morph selector --- app/Http/Controllers/Api/MorphController.php | 62 ++++++++++ resources/js/components/MorphSelector.vue | 119 +++++++++++++++++++ routes/api.php | 1 + 3 files changed, 182 insertions(+) create mode 100644 app/Http/Controllers/Api/MorphController.php create mode 100644 resources/js/components/MorphSelector.vue diff --git a/app/Http/Controllers/Api/MorphController.php b/app/Http/Controllers/Api/MorphController.php new file mode 100644 index 0000000..90bf957 --- /dev/null +++ b/app/Http/Controllers/Api/MorphController.php @@ -0,0 +1,62 @@ +check() ){ + return abort(403); + } + $morph = $request->input('morph', Product::class); + + $q = '%' . $request->input('q') . '%'; + switch ($morph) { + case Product::class: + $q = Product::where('name', 'LIKE', $q) + ->orWhere('description', 'LIKE', $q); + break; + case Post::class: + $q = Post::where('title', 'LIKE', $q) + ->orWhere('subtitle', 'LIKE', $q) + ->orWhere('body', 'LIKE', $q); + break; + case Group::class: + $q = Group::where('name', 'LIKE', $q) + ->orWhere('subtitle', 'LIKE', $q) + ->orWhere('description', 'LIKE', $q); + break; + case Category::class: + $q = Category::where('name', 'LIKE', $q) + ->orWhere('subtitle', 'LIKE', $q) + ->orWhere('description', 'LIKE', $q); + break; + case Clip::class: + $q = Clip::where('title', 'LIKE', $q) + ->orWhere('body', 'LIKE', $q); + break; + case Gallery::class: + $q = Gallery::where('title', 'LIKE', $q) + ->orWhere('description', 'LIKE', $q); + break; + default: + return ['OK' => false, 'error' => __("Invalid morph")]; + } + + return ['OK' => true, 'data' => $q->orderByDesc('updated_at')->limit($this->limit)->get()]; + } +} diff --git a/resources/js/components/MorphSelector.vue b/resources/js/components/MorphSelector.vue new file mode 100644 index 0000000..c8e7861 --- /dev/null +++ b/resources/js/components/MorphSelector.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/routes/api.php b/routes/api.php index fbc65e5..d7b2672 100644 --- a/routes/api.php +++ b/routes/api.php @@ -36,4 +36,5 @@ Route::prefix('v1')->name('v1.')->group( Route::get('states', [\App\Http\Controllers\Api\StateController::class,'index'])->name('state.index'); Route::get('state/{state}', [\App\Http\Controllers\Api\StateController::class,'show'])->name('state.show'); Route::get('category/props/{category}', [\App\Http\Controllers\Api\CategoryController::class,'props'])->name('category.prop'); + Route::post('morph/search', [\App\Http\Controllers\Api\MorphController::class,'search'])->name('morph.search'); });