- 2.x - sites settings

- tags
- source-control soft deletes
This commit is contained in:
Saeed Vaziry
2024-10-06 00:04:57 +02:00
parent d1f2add699
commit 3c50e2c947
44 changed files with 972 additions and 119 deletions

View File

@ -9,6 +9,9 @@
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
/**
* @deprecated
*/
class AttachTag
{
public function attach(User $user, array $input): Tag

View File

@ -4,7 +4,6 @@
use App\Models\Tag;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -12,8 +11,6 @@ class CreateTag
{
public function create(User $user, array $input): Tag
{
$this->validate($input);
$tag = Tag::query()
->where('project_id', $user->current_project_id)
->where('name', $input['name'])
@ -34,9 +31,9 @@ public function create(User $user, array $input): Tag
return $tag;
}
private function validate(array $input): void
public static function rules(): array
{
Validator::make($input, [
return [
'name' => [
'required',
],
@ -44,6 +41,6 @@ private function validate(array $input): void
'required',
Rule::in(config('core.tag_colors')),
],
])->validate();
];
}
}

View File

@ -8,6 +8,9 @@
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
/**
* @deprecated
*/
class DetachTag
{
public function detach(Tag $tag, array $input): void

View File

@ -3,28 +3,21 @@
namespace App\Actions\Tag;
use App\Models\Tag;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
class EditTag
{
public function edit(Tag $tag, array $input): void
{
$this->validate($input);
$tag->name = $input['name'];
$tag->color = $input['color'];
$tag->save();
}
/**
* @throws ValidationException
*/
private function validate(array $input): void
public static function rules(): array
{
$rules = [
return [
'name' => [
'required',
],
@ -33,6 +26,5 @@ private function validate(array $input): void
Rule::in(config('core.tag_colors')),
],
];
Validator::make($input, $rules)->validate();
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Actions\Tag;
use App\Models\Server;
use App\Models\Site;
use App\Models\Tag;
use App\Models\User;
use Illuminate\Validation\Rule;
class SyncTags
{
public function sync(User $user, array $input): void
{
/** @var Server|Site $taggable */
$taggable = $input['taggable_type']::findOrFail($input['taggable_id']);
$tags = Tag::query()->whereIn('id', $input['tags'])->get();
$taggable->tags()->sync($tags->pluck('id'));
}
public static function rules(int $projectId): array
{
return [
'tags.*' => [
'required',
Rule::exists('tags', 'id')->where('project_id', $projectId),
],
'taggable_id' => [
'required',
'integer',
],
'taggable_type' => [
'required',
Rule::in(config('core.taggable_types')),
],
];
}
}