HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode-jobs/app/Repositories/CategoryRepository.php
<?php

namespace App\Repositories;

use App\Models\LeverCategory;
use App\Models\Vacancy;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;

class CategoryRepository
{

    private static function getQuery(): Builder
    {
        return LeverCategory::query();
    }

    public static function sync(string $title): LeverCategory
    {
        /** @var LeverCategory $category */
        $category = self::getQuery()->updateOrCreate(['title' => $title], ['title' => $title]);

        return $category;
    }

    public static function getCategories(): Collection
    {
        return self::getQuery()->where('count', '>', 0)->get();
    }

    public static function updateVacanciesCount(): void
    {
        $categories = LeverCategory::all();
        if ($categories->isEmpty()) {
            return;
        }

        foreach ($categories as $category) {
            $category->update(['count' => $category->vacancies->count()]);
        }
    }

    public static function getLocationCount(LeverCategory $category): int
    {
        $vacancies = $category->vacancies;

        $locations = [];
        foreach ($vacancies as $vacancy) {
            /** @var Vacancy $vacancy */
            $locations = array_merge($locations, $vacancy->locations->pluck('title')->toArray());
        }
        $locations = array_unique($locations);

        return count($locations);
    }

    public static function getListByIds(array $ids): Collection
    {
        return self::getQuery()->whereIn('id', $ids)->get()->keyBy('id');
    }

}