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/VacancyRepository.php
<?php

namespace App\Repositories;

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

class VacancyRepository
{

    const STATE_PUBLISHED = 'published';

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

    public static function hasVacancies(): bool
    {
        return self::getQuery()->where('state', self::STATE_PUBLISHED)->exists();
    }

    public static function getVacancies(): Collection
    {
        return self::getQuery()->where('state', self::STATE_PUBLISHED)->get();
    }

    public static function sync(array $vacancy): void
    {
        // TODO Как возможное решение
        if ('closed' === $vacancy['state']) {
            return;
        }
        if (empty($vacancy['department']) || empty($vacancy['locations'])) {
            return;
        }

        $category = CategoryRepository::sync($vacancy['department']);
        $locations = LocationRepository::sync($vacancy['locations']);

        $vacancy['category_id'] = $category->id;

        $vacancy = self::getQuery()->updateOrCreate(['external_id' => $vacancy['external_id']], $vacancy);
        /** @var Vacancy $vacancy */

        LocationRepository::relate($vacancy, $locations);
    }

}