'/energia-mineracao', 'fintech' => '/sectores/mercado-financeiro/fintech', default => '/sectores/'.$slug, }; } /** A historical combined filter remains a union, never an arbitrary reassignment. */ public static function slugs(string $slug): array { return match ($slug) { 'energia', 'energia-mineracao' => ['energia', 'energia-especifica', 'mineracao'], 'mercado-financeiro' => ['mercado-financeiro', 'fintech'], 'mercado-financeiro/fintech' => ['fintech'], default => [$slug], }; } public static function constrain(Builder $query, string $slug): Builder { return $query->whereHas('sector', fn ($s) => $s->whereIn('slug', self::slugs($slug))); } public static function opportunities(Sector $sector): Builder { return self::constrain(Opportunity::published(), $sector->slug); } public static function catalog() { return Sector::catalog()->orderBy('sort_order')->get()->each(function ($sector) { $sector->setAttribute('opportunities_count', self::opportunities($sector)->count()); $sector->setAttribute('url', self::href($sector->slug)); $sector->setAttribute('specializations', $sector->slug === 'mercado-financeiro' ? Sector::where('slug', 'fintech')->where('is_active', true)->whereNotNull('published_at')->get(['id', 'name', 'slug'])->map(fn ($s) => [...$s->only(['id', 'name', 'slug']), 'url' => self::href($s->slug)])->all() : []); }); } }