Files
reservas/database/seeders/DatabaseSeeder.php
joaomiranda 9b8b21c853
Some checks failed
tests / ci (push) Has been cancelled
fix: make local login recovery safe
2026-08-05 14:21:18 +01:00

76 lines
2.7 KiB
PHP

<?php
namespace Database\Seeders;
use App\Domain\Identity\Enums\RoleName;
use App\Domain\Identity\Models\Role;
use App\Domain\Inventory\Models\SnipeAsset;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Seed the application's database.
*/
public function run(): void
{
if (! app()->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();
}
}
}