source-controls (#193)

* edit source control
* assign project after creation
* global and project scoped source controls
This commit is contained in:
Saeed Vaziry
2024-05-08 00:07:11 +02:00
committed by GitHub
parent e704a13d6b
commit 179aefefac
15 changed files with 362 additions and 10 deletions

View File

@ -14,7 +14,7 @@ public function create(User $user, array $input): Project
$input['name'] = strtolower($input['name']);
}
$this->validate($user, $input);
$this->validate($input);
$project = new Project([
'name' => $input['name'],
@ -22,10 +22,12 @@ public function create(User $user, array $input): Project
$project->save();
$project->users()->attach($user);
return $project;
}
private function validate(User $user, array $input): void
private function validate(array $input): void
{
Validator::make($input, [
'name' => [

View File

@ -3,6 +3,7 @@
namespace App\Actions\SourceControl;
use App\Models\SourceControl;
use App\Models\User;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
@ -10,7 +11,7 @@
class ConnectSourceControl
{
public function connect(array $input): void
public function connect(User $user, array $input): void
{
$this->validate($input);
@ -18,6 +19,7 @@ public function connect(array $input): void
'provider' => $input['provider'],
'profile' => $input['name'],
'url' => Arr::has($input, 'url') ? $input['url'] : null,
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]);
$this->validateProvider($sourceControl, $input);

View File

@ -0,0 +1,54 @@
<?php
namespace App\Actions\SourceControl;
use App\Models\SourceControl;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class EditSourceControl
{
public function edit(SourceControl $sourceControl, User $user, array $input): void
{
$this->validate($input);
$sourceControl->profile = $input['name'];
$sourceControl->url = isset($input['url']) ? $input['url'] : null;
$sourceControl->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id;
$this->validateProvider($sourceControl, $input);
$sourceControl->provider_data = $sourceControl->provider()->createData($input);
if (! $sourceControl->provider()->connect()) {
throw ValidationException::withMessages([
'token' => __('Cannot connect to :provider or invalid token!', ['provider' => $sourceControl->provider]
),
]);
}
$sourceControl->save();
}
/**
* @throws ValidationException
*/
private function validate(array $input): void
{
$rules = [
'name' => [
'required',
],
];
Validator::make($input, $rules)->validate();
}
/**
* @throws ValidationException
*/
private function validateProvider(SourceControl $sourceControl, array $input): void
{
Validator::make($input, $sourceControl->provider()->createRules($input))->validate();
}
}