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')