adrema/app/Member/Actions/SearchAction.php

31 lines
853 B
PHP

<?php
namespace App\Member\Actions;
use App\Member\FilterScope;
use App\Member\Member;
use App\Member\MemberResource;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Pagination\LengthAwarePaginator;
use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction;
class SearchAction
{
use AsAction;
/**
* @param array<string, mixed> $filter
* @return LengthAwarePaginator<int, Member>
*/
public function handle(array $filter, int $perPage): LengthAwarePaginator
{
return FilterScope::fromPost($filter)->getQuery()->paginate($perPage);
}
public function asController(ActionRequest $request): AnonymousResourceCollection
{
return MemberResource::collection($this->handle($request->input('filter', []), $request->input('per_page', 15)));
}
}