diff --git a/app/Livewire/Admin/User/DeleteUser.php b/app/Livewire/Admin/User/DeleteUser.php index e430a8d..9871804 100644 --- a/app/Livewire/Admin/User/DeleteUser.php +++ b/app/Livewire/Admin/User/DeleteUser.php @@ -5,21 +5,28 @@ use Livewire\Component; use Livewire\Attributes\On; use App\Models\User; +use App\Services\UserService; +use Exception; class DeleteUser extends Component { - #[On('confirm-delete')] - public function deleteUser($payload) + + #[On('confirm-delete-user')] + public function deleteUser(UserService $userService, $payload) { - $deletedClient = User::findOrFail($payload); + $deletedUser = User::findOrFail($payload); + try { + if ($deletedUser) { + $deletedUser = $userService->deleteUser($deletedUser); + } - if ($deletedClient) { - $deletedClient->delete(); + $this->dispatch('user-deleted'); + $this->dispatch('notify', message: $deletedUser->name . ' Usuário excluído com sucesso!'); + } catch (Exception $e) { + $this->dispatch('user-delete-error'); + $this->dispatch('notify', message: $e->getMessage()); } - - $this->dispatch('user-deleted'); - $this->dispatch('notify', message: 'Cliente excluído com sucesso!'); } public function render() diff --git a/app/Livewire/Admin/User/EditUser.php b/app/Livewire/Admin/User/EditUser.php index 82edae1..fa0c906 100644 --- a/app/Livewire/Admin/User/EditUser.php +++ b/app/Livewire/Admin/User/EditUser.php @@ -1,13 +1,50 @@ user = User::find($id); + + + if ($this->user) { + $this->userForm->editUser($this->user); + } + } catch (\Exception $e) { + $this->dispatch('notify', message: 'Ocorreu um erro inesperado ao editar o usuário. ' . $e); + } + } + public function editUser(UserService $userService) + { + $data = $this->userForm->validate(); + try { + if (!$userService->updateUser($this->user, $data)) { + throw new \Exception('O serviço não confirmou a atualização.'); + } + + $this->dispatch('user-updated'); + $this->dispatch('notify', message: $this->clientForm->client_name . ' atualizado com sucesso!'); + } catch (\Exception $e) { + $this->dispatch('notify', message: 'Falha na edição: ' . $e->getMessage(), type: 'error'); + } + } public function render() { - return view('livewire.admin.users.edit-user.php'); + return view('livewire.admin.users.edit-user'); } } diff --git a/app/Livewire/Forms/UserForm.php b/app/Livewire/Forms/UserForm.php new file mode 100644 index 0000000..89917c6 --- /dev/null +++ b/app/Livewire/Forms/UserForm.php @@ -0,0 +1,45 @@ +toArray(); + + $data['permissions'] = $data['permissions'][0]; + + $this->fill($data); + } + + protected $rules = [ + 'name' => 'required|string|max:255', + 'email' => 'email|unique:users,email', + 'password' => 'string|min:8', + 'password_confirm' => 'string|same:password', + 'permissions' => 'required|string|in:user,admin' + ]; + + protected $messages = [ + 'name' => 'Nome precisa ser informado.', + 'email' => 'O email precisa ser informado.', + 'email.unique' => 'O email informado já foi cadastrado anteriormente.', + 'password' => 'A senha precisa ter 8 ou mais caracteres.', + 'password_confirm' => 'As senhas não coincidem.', + 'permissions' => 'Escolha o nível de autorização do usuário.' + ]; +} diff --git a/app/Services/UserService.php b/app/Services/UserService.php index ff082d2..7af14fc 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -3,6 +3,8 @@ namespace App\Services; use App\Models\User; +use Exception; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; class UserService @@ -19,4 +21,19 @@ public function showUsers() $users = User::all(); return $users; } + + public function updateUser(User $user, $data) + { + return $user->update($data); + } + + public function deleteUser($user) + { + if ($user->id === Auth::user()->id) { + throw new Exception('Não é possível excluir seu próprio usuário.', 403); + } + + $user->delete(); + return $user; + } } diff --git a/resources/views/components/are-you-sure.blade.php b/resources/views/components/are-you-sure.blade.php index 8d662d7..1edf19b 100644 --- a/resources/views/components/are-you-sure.blade.php +++ b/resources/views/components/are-you-sure.blade.php @@ -3,8 +3,9 @@ - 'showQuestion' controla a visibilidade. - '@sure.window' é o evento que dispara a abertura. --> -
+
- -
diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 8c056f0..11be6b6 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -4,9 +4,11 @@ @section('content') + + @endsection \ No newline at end of file diff --git a/resources/views/livewire/admin/show-users.blade.php b/resources/views/livewire/admin/show-users.blade.php index 310c4e9..ef699eb 100644 --- a/resources/views/livewire/admin/show-users.blade.php +++ b/resources/views/livewire/admin/show-users.blade.php @@ -1,17 +1,12 @@ -
+