ownedUserGitConnection($user, $userGitConnectionId); $repository = $this->repositoryFromConnection($userGitConnection, $providerRepositoryId); if ($repository === null) { throw ValidationException::withMessages([ 'provider_repository_id' => 'The selected repository is not available through this Git connection.', ]); } return [ 'base_url' => $userGitConnection->base_url, 'owner_name' => $repository->owner, 'provider' => $userGitConnection->provider, 'provider_repository_id' => $repository->providerRepositoryId, 'repository_full_name' => $repository->fullName, 'repository_name' => $repository->name, 'repository_url' => $repository->htmlUrl, ]; } private function ownedUserGitConnection(User $user, int $userGitConnectionId): UserGitConnection { $userGitConnection = UserGitConnection::query()->findOrFail($userGitConnectionId); abort_unless($userGitConnection->user_id === $user->id, 403); return $userGitConnection; } private function repositoryFromConnection( UserGitConnection $userGitConnection, string $providerRepositoryId, ): ?GitRepository { return collect( $this->gitProviderManager ->client($userGitConnection->provider) ->listRepositories($userGitConnection->base_url, $userGitConnection->api_token), ) ->first(fn (GitRepository $repository): bool => $repository->providerRepositoryId === $providerRepositoryId); } }