From 313510abcbd3094fae1425ab7538bafff2dd883a Mon Sep 17 00:00:00 2001 From: Syarif Ubaidillah Date: Sat, 31 Oct 2026 16:49:41 +0700 Subject: [PATCH] feat: enhance lookup queries with dynamic filters and mapping updates - Add odd-semester filter to TermLookup for semester-specific queries. - Update RoleLookup to handle empty search strings safely. - Refactor RoleLookupController and TermLookupController to map lookup results into standardized {id, text} objects. --- app/Domains/Academic/Queries/Lookup/TermLookup.php | 5 +++-- app/Domains/Identity/Queries/Lookup/RoleLookup.php | 2 +- app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php | 3 ++- app/Http/Controllers/Api/V1/Lookup/TermLookupController.php | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/Domains/Academic/Queries/Lookup/TermLookup.php b/app/Domains/Academic/Queries/Lookup/TermLookup.php index 4a3177f..35b11b7 100644 --- a/app/Domains/Academic/Queries/Lookup/TermLookup.php +++ b/app/Domains/Academic/Queries/Lookup/TermLookup.php @@ -7,12 +7,13 @@ use Illuminate\Support\Collection; class TermLookup { - public static function fetch($search = null): Collection + public static function fetch(bool $odd = false, $search = null): Collection { return once(fn () => Term::query() ->select(['name']) ->when($search, fn ($query) => $query->where('name', 'like', "%{$search}%")) + ->when($odd, fn ($query) => $query->where('semester', 1)) ->latest('date_start') - ->pluck('name', 'name')); + ->pluck('name')); } } diff --git a/app/Domains/Identity/Queries/Lookup/RoleLookup.php b/app/Domains/Identity/Queries/Lookup/RoleLookup.php index 86a81ba..be5a9f7 100644 --- a/app/Domains/Identity/Queries/Lookup/RoleLookup.php +++ b/app/Domains/Identity/Queries/Lookup/RoleLookup.php @@ -11,7 +11,7 @@ class RoleLookup { return Role::query() ->select('name') - ->where('name', 'like', "%{$search}%") + ->when($search != '', fn($q) => $q->where('name', 'like', "%{$search}%")) ->get(); } } diff --git a/app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php b/app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php index e1d3ba1..6dea69b 100644 --- a/app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php +++ b/app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php @@ -14,7 +14,8 @@ class RoleLookupController extends Controller */ public function __invoke(Request $request, RoleLookup $lookup) { - $result = $lookup->fetch($request->input('search')); + $result = $lookup->fetch($request->input('search')) + ->map(fn($model) => (object) ['id' => $model->name, 'text' => $model->name]); return LookupResource::collection($result); } diff --git a/app/Http/Controllers/Api/V1/Lookup/TermLookupController.php b/app/Http/Controllers/Api/V1/Lookup/TermLookupController.php index 7c9961b..a09958f 100644 --- a/app/Http/Controllers/Api/V1/Lookup/TermLookupController.php +++ b/app/Http/Controllers/Api/V1/Lookup/TermLookupController.php @@ -11,7 +11,7 @@ class TermLookupController extends Controller { public function __invoke(Request $request, TermLookup $lookup) { - $terms = $lookup->fetch()->map(fn ($term) => (object) [ + $terms = $lookup->fetch(odd: true, search: $request->query('term'))->map(fn ($term) => (object) [ 'id' => $term, 'text' => $term, ]);