Files
animethemes-server/app/Concerns/Actions/GraphQL/PaginatesModels.php
T
2025-10-01 17:18:31 -03:00

26 lines
778 B
PHP

<?php
declare(strict_types=1);
namespace App\Concerns\Actions\GraphQL;
use App\Exceptions\GraphQL\ClientValidationException;
use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Config;
trait PaginatesModels
{
public function paginate(Builder $builder, array $args): Paginator
{
$first = Arr::get($args, 'first');
$page = Arr::get($args, 'page');
$maxCount = Config::get('graphql.pagination_values.max_count');
throw_if($maxCount !== null && $first > $maxCount, new ClientValidationException("Maximum first value is {$maxCount}. Got {$first}. Fetch in smaller chuncks."));
return $builder->paginate($first, page: $page);
}
}