<?php declare(strict_types=1); /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 * @link https://castopod.org/ */ namespace App\Models; use Modules\Auth\Entities\User; use Myth\Auth\Models\UserModel as MythAuthUserModel; class UserModel extends MythAuthUserModel { /** * @var string */ protected $returnType = User::class; /** * @return User[] */ public function getPodcastContributors(int $podcastId): array { $cacheName = "podcast#{$podcastId}_contributors"; if (! ($found = cache($cacheName))) { $found = $this->select('users.*, auth_groups.name as podcast_role') ->join('podcasts_users', 'podcasts_users.user_id = users.id') ->join('auth_groups', 'auth_groups.id = podcasts_users.group_id') ->where('podcasts_users.podcast_id', $podcastId) ->findAll(); cache() ->save($cacheName, $found, DECADE); } return $found; } public function getPodcastContributor(int $userId, int $podcastId): ?User { return $this->select('users.*, podcasts_users.podcast_id as podcast_id, auth_groups.name as podcast_role') ->join('podcasts_users', 'podcasts_users.user_id = users.id') ->join('auth_groups', 'auth_groups.id = podcasts_users.group_id') ->where([ 'users.id' => $userId, 'podcast_id' => $podcastId, ]) ->first(); } }