projectRepositoryConnection($project, $repositoryConnectionId); $userGitConnection = $this->matchingUserGitConnection($user->id, $repositoryConnection); if ($userGitConnection === null) { return [ 'is_valid' => false, 'message' => 'Connect a matching Git connection in your user settings first.', ]; } $syntaxMessage = $this->validateGitBranchName->message($branchName); if ($syntaxMessage !== null) { return [ 'is_valid' => false, 'message' => $syntaxMessage, ]; } try { $branchAlreadyExists = collect( $this->gitProviderManager ->client($userGitConnection->provider) ->listBranches( $userGitConnection->api_token, $repositoryConnection->toGitRepository(), ), ) ->contains( fn (GitBranch $branch): bool => $branch->name === $branchName, ); } catch (Throwable) { return [ 'is_valid' => false, 'message' => sprintf('%s could not validate this branch name right now.', config('app.name')), ]; } if ($branchAlreadyExists) { return [ 'is_valid' => false, 'message' => 'This branch name already exists in the selected repository.', ]; } return [ 'is_valid' => true, 'message' => "Branch name is available for {$ticket->ticket_key}.", ]; } private function projectRepositoryConnection(Project $project, int $repositoryConnectionId): RepositoryConnection { return $project->repositoryConnections() ->findOrFail($repositoryConnectionId); } private function matchingUserGitConnection( int $userId, RepositoryConnection $repositoryConnection, ): ?UserGitConnection { return UserGitConnection::query() ->where('user_id', $userId) ->where('provider', $repositoryConnection->provider) ->where('base_url', $repositoryConnection->base_url) ->first(); } }