vito/app/Actions/Site/UpdateSourceControl.php
2025-03-12 13:31:10 +01:00

55 lines
1.5 KiB
PHP

<?php
namespace App\Actions\Site;
use App\Exceptions\RepositoryNotFound;
use App\Exceptions\RepositoryPermissionDenied;
use App\Exceptions\SourceControlIsNotConnected;
use App\Models\Site;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class UpdateSourceControl
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function update(Site $site, array $input): void
{
$site->source_control_id = $input['source_control'];
try {
if ($site->sourceControl) {
$site->sourceControl->getRepo($site->repository);
}
} catch (SourceControlIsNotConnected) {
throw ValidationException::withMessages([
'source_control' => 'Source control is not connected',
]);
} catch (RepositoryPermissionDenied) {
throw ValidationException::withMessages([
'repository' => 'You do not have permission to access this repository',
]);
} catch (RepositoryNotFound) {
throw ValidationException::withMessages([
'repository' => 'Repository not found',
]);
}
$site->save();
}
/**
* @return array<string, array<int, mixed>>
*/
public static function rules(): array
{
return [
'source_control' => [
'required',
Rule::exists('source_controls', 'id'),
],
];
}
}