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