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 @@ +permissions; + return isset($user->permissions) ? in_array('admin', $user->permissions) : false; }); } } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index dc6f9fe..a337b71 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use App\Models\User; +use App\Models\Client; use Illuminate\Support\Facades\Hash; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -20,5 +21,7 @@ public function run(): void 'email' => 'inglinesystemsadmin@inglinesystems.com.br', 'password' => Hash::make('*Ingline.Sys#9420%SECURITY#') ]); + + Client::factory()->create([]); } } diff --git a/resources/css/header.css b/resources/css/header.css index b7a6f26..a701602 100644 --- a/resources/css/header.css +++ b/resources/css/header.css @@ -60,6 +60,7 @@ @layer components { @apply absolute right-5; @apply rounded-xl; @apply max-w-7 max-h-7; + @apply shadow-md shadow-blue-400; } .profile-list-items { diff --git a/resources/images/newlogo.png b/resources/images/newlogo.png new file mode 100644 index 0000000..0d155ba Binary files /dev/null and b/resources/images/newlogo.png differ diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index ac2efe6..fd9e7e7 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -3,6 +3,7 @@ @section('content') +
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 1c08c7d..8eeda8c 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -22,7 +22,7 @@ Início @@ -42,8 +42,25 @@ src="{{ Vite::asset('resources/images/avatar-nexus.svg') }}" alt="Avatar"> -