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

File "PaginateLinks.php"

Full Path: /home/markqprx/iniasli.pro/app-20260222054312/Actions/Link/PaginateLinks.php
File size: 1.08 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Actions\Link;

use App\Models\Link;
use Common\Database\Datasource\Datasource;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

class PaginateLinks
{
    public function execute(array $params): array
    {
        $builder = Link::withTrashed()->with([
            'rules',
            'tags',
            'pixels',
            'groups',
            'domain',
        ]);

        if ($groupId = Arr::get($params, 'groupId')) {
            // get only links that either belong to specified group or belong to any group besides it
            $operator = Str::contains($groupId, '!') ? 'doesntHave' : 'has';
            $groupId = str_replace('!', '', $groupId);
            $builder->whereHas(
                'groups',
                fn(Builder $builder) => $builder->where(
                    'link_group_id',
                    $groupId,
                ),
                $operator,
            );
        }

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

        return $dataSource->paginate()->toArray();
    }
}