Nexus-InglineSystems/app/Livewire/Admin/CreateUser.php

86 lines
3.0 KiB
PHP

<?php
namespace App\Livewire\Admin;
use App\Services\UserService; // <-- Importe seu Service
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;
// 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',
'password' => 'required|string|min:8',
'password_confirm' => 'required|string|same:password', // <-- Regra importante!
'permission_level' => 'required|boolean' // ou 'required|in:0,1'
];
protected $messages = [
'name' => 'Nome precisa ser informado.',
'email' => 'O email precisa ser informado.',
'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.'
];
/**
* 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 save(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
try {
// 5. CHAMA O MESMO SERVICE! Nenhuma lógica de negócio é duplicada.
$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
session()->flash('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.
if ($e->getMessage() == 'O e-mail já está cadastrado.') {
$this->addError('email', $e->getMessage());
}
$this->addError('general', $e->getMessage());
}
}
public function render()
{
return view('livewire.admin.create-user');
}
}