46 lines
1.5 KiB
PHP
46 lines
1.5 KiB
PHP
|
|
<?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);
|
||
|
|
}
|
||
|
|
}
|