<?php namespace App\Repositories; use App\Models\Podcast; use App\Models\User; use Illuminate\Support\Collection; /** @extends Repository<Podcast> */ class PodcastRepository extends Repository { public function findOneByUrl(string $url): ?Podcast { return $this->findOneBy(['url' => $url]); } /** @return Collection<Podcast> */ public function getAllByUser(User $user): Collection { return $user->podcasts()->orderByPivot('updated_at', 'desc')->get(); } /** @return Collection<Podcast> */ public function getMany(array $ids, bool $preserveOrder = false, ?User $user = null): Collection { $podcasts = Podcast::query() ->subscribedBy($user ?? $this->auth->user()) ->whereIn('podcasts.id', $ids) ->groupBy('podcasts.id') ->distinct() ->get('podcasts.*'); return $preserveOrder ? $podcasts->orderByArray($ids) : $podcasts; } }