JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr{ gilour

File "PaginateChannels-20260314142904.php"

Full Path: /home/markqprx/iniasli.pro/Channels/PaginateChannels-20260314142904.php
File size: 1.34 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace Common\Channels;

use App\Models\Channel;
use Common\Database\Datasource\Datasource;
use Illuminate\Pagination\AbstractPaginator;
use Illuminate\Support\Arr;

class PaginateChannels
{
    public function execute(
        array $params,
        mixed $builder = null,
    ): AbstractPaginator {
        if (!$builder) {
            $builder = Channel::query();
        }

        if ($channelIds = Arr::get($params, 'channelIds')) {
            $builder->whereIn('id', explode(',', $channelIds));
        }

        if ($userId = Arr::get($params, 'userId')) {
            $builder->where('user_id', $userId);
        }

        if (Arr::get($params, 'hideInternal')) {
            $builder->where('internal', false);
        }

        if ($type = Arr::get($params, 'type')) {
            $builder->where('type', $type);
        }

        $paginator = new Datasource($builder, $params);

        $pagination = $paginator->paginate();

        if (Arr::get($params, 'loadItemsCount')) {
            $pagination->loadCount('items');
        }

        if (Arr::get($params, 'loadFirstItems')) {
            $pagination->load([
                'items' => fn($query) => $query
                    ->orderBy('order')
                    ->where('order', '<=', 4)
                    ->compact(),
            ]);
        }

        return $pagination;
    }
}