Files
KanbanGit/app/Actions/UserGitConnections/StoreUserGitConnection.php
T
Twyco 8b25421e7c
linter / quality (pull_request) Successful in 1m18s
tests / ci (8.4) (pull_request) Successful in 1m28s
Add application API and OpenAPI docs
2026-04-20 13:22:56 +02:00

51 lines
1.6 KiB
PHP

<?php
namespace App\Actions\UserGitConnections;
use App\Actions\Git\GitProviderKey;
use App\Actions\Git\GitProviderManager;
use App\Models\User;
use App\Models\UserGitConnection;
use Illuminate\Support\Arr;
use Illuminate\Validation\ValidationException;
use Throwable;
class StoreUserGitConnection
{
public function __construct(
private readonly GitProviderManager $gitProviderManager,
) {}
/**
* @param array{api_token: string, base_url: string, provider: string} $validated
*/
public function handle(User $user, array $validated): UserGitConnection
{
$apiToken = Arr::get($validated, 'api_token');
$baseUrl = Arr::get($validated, 'base_url');
$provider = GitProviderKey::from(Arr::get($validated, 'provider'));
try {
$gitProvider = $this->gitProviderManager->client($provider);
$authenticatedUser = $gitProvider->getAuthenticatedUser(
$baseUrl,
$apiToken,
);
} catch (Throwable) {
throw ValidationException::withMessages([
'api_token' => sprintf('%s could not authenticate against Gitea with this base URL and token.', config('app.name')),
]);
}
return UserGitConnection::query()->create([
'account_login' => $authenticatedUser->login,
'account_name' => $authenticatedUser->name,
'api_token' => $apiToken,
'base_url' => $baseUrl,
'provider' => $provider,
'provider_user_id' => $authenticatedUser->providerUserId,
'user_id' => $user->id,
]);
}
}