Browse Source

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.
master
Syarif Ubaidillah 2 days ago
parent
commit
313510abcb
  1. 5
      app/Domains/Academic/Queries/Lookup/TermLookup.php
  2. 2
      app/Domains/Identity/Queries/Lookup/RoleLookup.php
  3. 3
      app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php
  4. 2
      app/Http/Controllers/Api/V1/Lookup/TermLookupController.php

5
app/Domains/Academic/Queries/Lookup/TermLookup.php

@ -7,12 +7,13 @@ use Illuminate\Support\Collection;
class TermLookup class TermLookup
{ {
public static function fetch($search = null): Collection public static function fetch(bool $odd = false, $search = null): Collection
{ {
return once(fn () => Term::query() return once(fn () => Term::query()
->select(['name']) ->select(['name'])
->when($search, fn ($query) => $query->where('name', 'like', "%{$search}%")) ->when($search, fn ($query) => $query->where('name', 'like', "%{$search}%"))
->when($odd, fn ($query) => $query->where('semester', 1))
->latest('date_start') ->latest('date_start')
->pluck('name', 'name')); ->pluck('name'));
} }
} }

2
app/Domains/Identity/Queries/Lookup/RoleLookup.php

@ -11,7 +11,7 @@ class RoleLookup
{ {
return Role::query() return Role::query()
->select('name') ->select('name')
->where('name', 'like', "%{$search}%") ->when($search != '', fn($q) => $q->where('name', 'like', "%{$search}%"))
->get(); ->get();
} }
} }

3
app/Http/Controllers/Api/V1/Lookup/RoleLookupController.php

@ -14,7 +14,8 @@ class RoleLookupController extends Controller
*/ */
public function __invoke(Request $request, RoleLookup $lookup) 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); return LookupResource::collection($result);
} }

2
app/Http/Controllers/Api/V1/Lookup/TermLookupController.php

@ -11,7 +11,7 @@ class TermLookupController extends Controller
{ {
public function __invoke(Request $request, TermLookup $lookup) 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, 'id' => $term,
'text' => $term, 'text' => $term,
]); ]);

Loading…
Cancel
Save