mandant-crm/backend/app/Modules/User/Controllers/UserController.php

46 lines
1.5 KiB
PHP
Raw Normal View History

<?php
namespace App\Modules\User\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Modules\User\Actions\CreateUserAction;
use App\Modules\User\Actions\GetUsersAction;
use App\Modules\User\Actions\UpdateUserAction;
use App\Modules\User\DTOs\UserData;
use App\Modules\User\Requests\CreateUserRequest;
use App\Modules\User\Requests\UpdateUserRequest;
use App\Modules\User\Resources\UserResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
class UserController extends Controller
{
public function index(GetUsersAction $action): AnonymousResourceCollection
{
$this->authorize('viewAny', User::class);
return UserResource::collection($action->list());
}
public function store(CreateUserRequest $request, CreateUserAction $action): JsonResponse
{
$this->authorize('create', User::class);
$user = $action->handle(UserData::fromCreateRequest($request));
return UserResource::make($user)->response()->setStatusCode(201);
}
public function update(UpdateUserRequest $request, User $user, UpdateUserAction $action): UserResource
{
$this->authorize('update', $user);
$updated = $action->handle($user, UserData::fromUpdateRequest($request));
return UserResource::make($updated);
}
public function destroy(User $user): JsonResponse
{
$this->authorize('delete', $user);
$user->delete();
return response()->json(null, 204);
}
}