#591 - storage-providers

This commit is contained in:
Saeed Vaziry
2025-05-19 00:13:17 +02:00
parent 5a00d35eba
commit 563b9c5909
15 changed files with 517 additions and 39 deletions

View File

@ -5,6 +5,7 @@
use App\Models\Project;
use App\Models\StorageProvider;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -17,6 +18,8 @@ class CreateStorageProvider
*/
public function create(User $user, Project $project, array $input): StorageProvider
{
Validator::make($input, self::rules($input))->validate();
$storageProvider = new StorageProvider([
'user_id' => $user->id,
'provider' => $input['provider'],

View File

@ -4,6 +4,7 @@
use App\Models\Project;
use App\Models\StorageProvider;
use Illuminate\Support\Facades\Validator;
class EditStorageProvider
{
@ -12,6 +13,8 @@ class EditStorageProvider
*/
public function edit(StorageProvider $storageProvider, Project $project, array $input): StorageProvider
{
Validator::make($input, self::rules())->validate();
$storageProvider->profile = $input['name'];
$storageProvider->project_id = isset($input['global']) && $input['global'] ? null : $project->id;

View File

@ -53,8 +53,6 @@ public function create(Request $request, Project $project): StorageProviderResou
{
$this->authorize('create', StorageProvider::class);
$this->validate($request, CreateStorageProvider::rules($request->all()));
/** @var User $user */
$user = auth()->user();
$storageProvider = app(CreateStorageProvider::class)->create($user, $project, $request->all());
@ -85,8 +83,6 @@ public function update(Request $request, Project $project, StorageProvider $stor
$this->validateRoute($project, $storageProvider);
$this->validate($request, EditStorageProvider::rules());
$storageProvider = app(EditStorageProvider::class)->edit($storageProvider, $project, $request->all());
return new StorageProviderResource($storageProvider);

View File

@ -0,0 +1,73 @@
<?php
namespace App\Http\Controllers;
use App\Actions\StorageProvider\CreateStorageProvider;
use App\Actions\StorageProvider\DeleteStorageProvider;
use App\Actions\StorageProvider\EditStorageProvider;
use App\Http\Resources\StorageProviderResource;
use App\Models\StorageProvider;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Inertia\Inertia;
use Inertia\Response;
use Spatie\RouteAttributes\Attributes\Delete;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Patch;
use Spatie\RouteAttributes\Attributes\Post;
use Spatie\RouteAttributes\Attributes\Prefix;
#[Prefix('settings/storage-providers')]
#[Middleware(['auth'])]
class StorageProviderController extends Controller
{
#[Get('/', name: 'storage-providers')]
public function index(): Response
{
$this->authorize('viewAny', StorageProvider::class);
return Inertia::render('storage-providers/index', [
'storageProviders' => StorageProviderResource::collection(StorageProvider::getByProjectId(user()->current_project_id)->simplePaginate(config('web.pagination_size'))),
]);
}
#[Get('/json', name: 'storage-providers.json')]
public function json(): ResourceCollection
{
$this->authorize('viewAny', StorageProvider::class);
return StorageProviderResource::collection(StorageProvider::getByProjectId(user()->current_project_id)->get());
}
#[Post('/', name: 'storage-providers.store')]
public function store(Request $request): RedirectResponse
{
$this->authorize('create', StorageProvider::class);
app(CreateStorageProvider::class)->create(user(), user()->currentProject, $request->all());
return back()->with('success', 'Storage provider created.');
}
#[Patch('/{storageProvider}', name: 'storage-providers.update')]
public function update(Request $request, StorageProvider $storageProvider): RedirectResponse
{
$this->authorize('update', $storageProvider);
app(EditStorageProvider::class)->edit($storageProvider, user()->currentProject, $request->all());
return back()->with('success', 'Storage provider updated.');
}
#[Delete('{storageProvider}', name: 'storage-providers.destroy')]
public function destroy(StorageProvider $storageProvider): RedirectResponse
{
$this->authorize('delete', $storageProvider);
app(DeleteStorageProvider::class)->delete($storageProvider);
return to_route('storage-providers')->with('success', 'Storage provider deleted.');
}
}

View File

@ -2,6 +2,7 @@
namespace App\Models;
use Database\Factories\StorageProviderFactory;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
@ -17,7 +18,7 @@
*/
class StorageProvider extends AbstractModel
{
/** @use HasFactory<\Database\Factories\StorageProviderFactory> */
/** @use HasFactory<StorageProviderFactory> */
use HasFactory;
protected $fillable = [