From dbc8de4ede8494675ad903bca67bc28469ec386e Mon Sep 17 00:00:00 2001 From: lukibeg Date: Mon, 10 Nov 2025 21:59:33 -0300 Subject: [PATCH] =?UTF-8?q?feat|fix:=20Constr=C3=B3i=20um=20componente=20d?= =?UTF-8?q?e=20controller=20para=20exibi=C3=A7=C3=A3o=20de=20usu=C3=A1rios?= =?UTF-8?q?=20e=20ajusta=20alguns=20detalhes=20dos=20demais=20componentes?= =?UTF-8?q?=20de=20controller.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Livewire/Admin/AddClient.php | 30 +++++++------------ app/Livewire/Admin/CreateUser.php | 49 ++++++++++--------------------- app/Livewire/Admin/ShowUsers.php | 13 ++++++++ 3 files changed, 38 insertions(+), 54 deletions(-) create mode 100644 app/Livewire/Admin/ShowUsers.php diff --git a/app/Livewire/Admin/AddClient.php b/app/Livewire/Admin/AddClient.php index 7b5e395..2808a57 100644 --- a/app/Livewire/Admin/AddClient.php +++ b/app/Livewire/Admin/AddClient.php @@ -3,53 +3,43 @@ namespace App\Livewire\Admin; use App\Models\Client; +use App\Services\ClientService; use App\Livewire\Forms\ClientForm; // 1. Importa seu Form Object use Livewire\Component; use Livewire\WithFileUploads; -use Livewire\Attributes\On; +use Illuminate\Support\Facades\Crypt; + class AddClient extends Component { use WithFileUploads; - - // 1. Declara as propriedades principais public ClientForm $form; - /** - * Método principal chamado pelo wire:submit="save". - */ - public function save() + public function save(ClientService $clientService) { - - // 2. Valida os dados usando as 'rules' do ClientForm.php $this->form->validate(); try { $data = $this->form->all(); $data['name'] = $data['client_name']; - // 4. Lida com o upload do arquivo de imagem + + if ($this->form->profile_image_path) { $path = $this->form->profile_image_path->store('client_logos', 'public'); $data['profile_image_path'] = $path; } - // 5. Cria o cliente no banco de dados - Client::create($data); - // 6. Despacha um evento para atualizar outros componentes (ex: o grid de clientes) + $data['root_password'] = Crypt::encryptString($data['root_password']); + + $clientService->addClient($data); + $this->dispatch('client-added'); - // (Opcional) Envia uma notificação de sucesso $this->dispatch('notify', message: 'Cliente adicionado com sucesso!'); } catch (\Exception $e) { - dd($e); $this->dispatch('notify', message: 'Ocorreu um erro inesperado ao salvar.', type: 'error'); } - // 3. Pega todos os dados validados - } - /** - * Renderiza a view do modal. - */ public function render() { return view('livewire.admin.add-client'); diff --git a/app/Livewire/Admin/CreateUser.php b/app/Livewire/Admin/CreateUser.php index 15d39f3..c8bc9a4 100644 --- a/app/Livewire/Admin/CreateUser.php +++ b/app/Livewire/Admin/CreateUser.php @@ -2,27 +2,24 @@ namespace App\Livewire\Admin; -use App\Services\UserService; // <-- Importe seu Service +use App\Services\UserService; +use Illuminate\Support\Facades\Auth; use Livewire\Component; class CreateUser extends Component { - // 1. Propriedades públicas (os campos do formulário) - // Elas substituem o 'Request $request' public string $name = ''; public string $email = ''; public string $password = ''; - public string $password_confirm = ''; // <-- Você também precisa deste - public bool $permission_level = false; + public string $password_confirm = ''; + public bool $permissions = false; - // 2. As regras de validação (copiadas do seu controller) - // Nota: Adicionei 'same:password' para garantir que as senhas batem. protected $rules = [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8', - 'password_confirm' => 'required|string|same:password', // <-- Regra importante! - 'permission_level' => 'required|boolean' // ou 'required|in:0,1' + 'password_confirm' => 'required|string|same:password', + 'permissions' => 'required|boolean' ]; protected $messages = [ @@ -31,48 +28,32 @@ class CreateUser extends Component '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.', - 'permission_level' => 'Defina o nível de autorização do usuário.' + 'permissions' => 'Defina o nível de autorização do usuário.', ]; - /** - * O método de "salvar", que substitui o seu 'createUsers'. - * - * Note como injetamos o UserService direto no método! - * O Livewire cuida disso para você, assim como o Laravel faz nos controllers. - */ public function createUser(UserService $userService) { - // 3. Valida as propriedades públicas ($this->name, $this->email, etc.) $validated = $this->validate($this->rules, $this->messages); - // 4. Seu 'try...catch' - praticamente idêntico + + if ($validated['permissions'] === true) { + $validated['permissions'] = array('admin'); + } else { + $validated['permissions'] = array('user'); + } + try { - // 5. CHAMA O MESMO SERVICE! Nenhuma lógica de negócio é duplicada. + $this->authorize('createUser', Auth::user()); $user = $userService->createUser($validated); - // 6. O "Sucesso" (Tradução do Redirect) - // Limpa o formulário $this->reset(); - // Dispara um evento para o Alpine.js fechar o modal $this->dispatch('user-created'); - // Envia a mesma mensagem de sucesso do seu controller $this->dispatch('notify', message: 'Usuário cadastrado com sucesso!'); - - - // (Opcional) Se sua tabela de usuários for outro componente Livewire, - // você pode mandar ela atualizar assim: - // $this->dispatch('refreshUserList'); - } catch (\Exception $e) { - - // 7. O "Erro" (Tradução do Redirect de Erro) - // Em vez de redirecionar, adicionamos o erro ao formulário - // para que o usuário veja na tela, sem refresh. - $this->addError('general', $e->getMessage()); } } diff --git a/app/Livewire/Admin/ShowUsers.php b/app/Livewire/Admin/ShowUsers.php new file mode 100644 index 0000000..f6e8f66 --- /dev/null +++ b/app/Livewire/Admin/ShowUsers.php @@ -0,0 +1,13 @@ +