resolveRepositorySelectionAttributes->handle( $user, (int) Arr::get($validated, 'user_git_connection_id'), (string) Arr::get($validated, 'provider_repository_id'), ); $this->ensureRepositoryConnectionIsUnique($project, $repositoryAttributes, $repositoryConnection); $repositoryConnection->update($repositoryAttributes); return $repositoryConnection->fresh(); } /** * @param array{ * base_url: string, * owner_name: string, * provider: mixed, * provider_repository_id: string, * repository_full_name: string, * repository_name: string, * repository_url: string * } $repositoryAttributes */ private function ensureRepositoryConnectionIsUnique( Project $project, array $repositoryAttributes, RepositoryConnection $repositoryConnection, ): void { $query = $project->repositoryConnections() ->where('provider', $repositoryAttributes['provider']) ->where('base_url', $repositoryAttributes['base_url']) ->where('provider_repository_id', $repositoryAttributes['provider_repository_id']) ->whereKeyNot($repositoryConnection->id); if ($query->exists()) { throw ValidationException::withMessages([ 'provider_repository_id' => 'This repository is already linked to the project.', ]); } } }