netgescon-master/database/seeders/CompleteUsersSeeder.php
2025-07-20 14:57:25 +00:00

166 lines
5.0 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Spatie\Permission\Models\Role;
class CompleteUsersSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$this->command->info('🚀 Inizializzazione utenti completi per NetGesCon Laravel...');
// Assicuriamoci che tutti i ruoli esistano
$this->createRoles();
// Crea utenti aggiuntivi per i test
$this->createAdditionalUsers();
$this->command->info('✅ Seeder utenti completo terminato con successo!');
}
/**
* Crea tutti i ruoli necessari
*/
private function createRoles(): void
{
$roles = [
'super-admin' => 'Super Amministratore',
'amministratore' => 'Amministratore Condominio',
'collaboratore' => 'Collaboratore Amministratore',
'condomino' => 'Condomino/Proprietario',
'fornitore' => 'Fornitore di Servizi',
'inquilino' => 'Inquilino',
'servizi' => 'Servizi Tecnici',
'ospite' => 'Ospite (Solo Lettura)',
];
foreach ($roles as $roleName => $description) {
Role::firstOrCreate(['name' => $roleName, 'guard_name' => 'web']);
$this->command->info("✓ Ruolo creato: {$roleName} ({$description})");
}
}
/**
* Crea utenti aggiuntivi per completare i test
*/
private function createAdditionalUsers(): void
{
$additionalUsers = [
// Collaboratori
[
'name' => 'Collaboratore Test',
'email' => 'collaboratore@example.com',
'password' => 'password',
'role' => 'collaboratore'
],
// Fornitori
[
'name' => 'Fornitore Test',
'email' => 'fornitore@example.com',
'password' => 'password',
'role' => 'fornitore'
],
[
'name' => 'Ditta Pulizie',
'email' => 'pulizie@example.com',
'password' => 'password',
'role' => 'fornitore'
],
[
'name' => 'Ditta Manutenzione',
'email' => 'manutenzione@example.com',
'password' => 'password',
'role' => 'fornitore'
],
[
'name' => 'Tecnici Impianti',
'email' => 'impianti@example.com',
'password' => 'password',
'role' => 'fornitore'
],
// Servizi
[
'name' => 'Servizio Tecnico',
'email' => 'servizi@example.com',
'password' => 'password',
'role' => 'servizi'
],
[
'name' => 'Portiere Test',
'email' => 'portiere@example.com',
'password' => 'password',
'role' => 'servizi'
],
// Ospiti
[
'name' => 'Ospite Test',
'email' => 'ospite@example.com',
'password' => 'password',
'role' => 'ospite'
],
// Utenti per test specifici
[
'name' => 'Test Base User',
'email' => 'test.base@example.com',
'password' => 'password',
'role' => 'amministratore'
],
[
'name' => 'Test Workflow User',
'email' => 'test.workflow@example.com',
'password' => 'password',
'role' => 'amministratore'
],
[
'name' => 'Test Permissions User',
'email' => 'test.permissions@example.com',
'password' => 'password',
'role' => 'collaboratore'
],
// API Users
[
'name' => 'API Developer',
'email' => 'api.dev@example.com',
'password' => 'password',
'role' => 'amministratore'
],
[
'name' => 'API Test User',
'email' => 'api.test@example.com',
'password' => 'password',
'role' => 'collaboratore'
],
];
foreach ($additionalUsers as $userData) {
$user = User::firstOrCreate(
['email' => $userData['email']],
[
'name' => $userData['name'],
'password' => Hash::make($userData['password']),
'email_verified_at' => now(),
]
);
// Assegna il ruolo
if (!$user->hasRole($userData['role'])) {
$user->assignRole($userData['role']);
}
$this->command->info("✓ Utente creato: {$user->name} ({$user->email}) - Ruolo: {$userData['role']}");
}
}
}