feat|fix: Constrói um componente de controller para exibição de usuários e ajusta alguns detalhes dos demais componentes de controller.
This commit is contained in:
parent
63aa8864c8
commit
dbc8de4ede
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Livewire\Admin;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class ShowUsers extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.admin.show-users');
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue