environment(['local', 'testing'])) { $this->command->warn('O DatabaseSeeder contém credenciais de desenvolvimento e foi ignorado fora de local/testing.'); return; } $roles = collect(RoleName::cases())->mapWithKeys(fn (RoleName $role) => [ $role->value => Role::firstOrCreate( ['name' => $role->value], ['description' => match ($role) { RoleName::Requester => 'Consulta equipamentos e cria requisições.', RoleName::Approver => 'Decide requisições e consulta o calendário global.', RoleName::InventoryOperator => 'Regista entregas, devoluções e incidentes.', RoleName::Administrator => 'Configura e administra todo o portal.', RoleName::Auditor => 'Consulta histórico e auditoria sem alterar dados.', }] ), ]); $demo = User::query()->updateOrCreate( ['email' => 'demo@escola.pt'], [ 'name' => 'Utilizador de Demonstração', 'email_verified_at' => now(), 'password' => Hash::make('password'), 'department' => 'Docentes', 'active' => true, ], ); $demo->roles()->sync([$roles[RoleName::Requester->value]->id]); $admin = User::query()->updateOrCreate( ['email' => 'admin@escola.pt'], [ 'name' => 'Administrador do Portal', 'email_verified_at' => now(), 'password' => Hash::make('password'), 'department' => 'Serviços de Informática', 'active' => true, ], ); $admin->roles()->sync([ $roles[RoleName::Requester->value]->id, $roles[RoleName::Approver->value]->id, $roles[RoleName::InventoryOperator->value]->id, $roles[RoleName::Administrator->value]->id, ]); $snipeItConfigured = filled(config('services.snipe_it.url')) && filled(config('services.snipe_it.read_token')); if (! $snipeItConfigured && ! SnipeAsset::query()->exists()) { SnipeAsset::factory()->count(18)->create(); } } }