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);
}
}