*/ class FindAnimeByExternalSiteController extends BaseController { use ConstrainsEagerLoads; /** * @param array $args * @return Builder */ public function index(mixed $root, array $args, $context, $resolveInfo): Builder { $builder = Anime::query(); $site = Arr::get($args, FindAnimeByExternalSiteQuery::ATTRIBUTE_SITE); $externalId = Arr::get($args, FindAnimeByExternalSiteQuery::ATTRIBUTE_ID); $link = Arr::get($args, FindAnimeByExternalSiteQuery::ATTRIBUTE_LINK); if (is_null($externalId) && is_null($link)) { throw new ClientValidationException('At least "id" or "link" is required.'); } $builder->whereRelation(Anime::RELATION_RESOURCES, function (Builder $query) use ($site, $externalId, $link) { $query->where(ExternalResource::ATTRIBUTE_SITE, $site); if (is_int($externalId)) { $query->where(ExternalResource::ATTRIBUTE_EXTERNAL_ID, $externalId); } if (is_string($link)) { $query->where(ExternalResource::ATTRIBUTE_LINK, $link); } }); $this->constrainEagerLoads($builder, $resolveInfo, new AnimeType()); return $builder; } }