TIDE/backend/database/seeders/AdminUserSeeder.php
Yisroel Baum beb4ddd1e9
split seeders by domain entity
Replaces the laravel-default scaffold seeder with one file per
domain (AdminUser, User, Post, Comment) plus a config/seed.php
to source admin credentials from env. DatabaseSeeder is now a
pure orchestrator that calls the sub-seeders in dependency
order.
2026-05-06 22:38:14 +03:00

49 lines
1.4 KiB
PHP

<?php
namespace Database\Seeders;
use App\Auth\PasswordHasher;
use App\Shared\ValueObject\EmailAddress;
use App\User\CreateUserDto;
use App\User\User;
use App\User\UserRepository;
use DateTimeImmutable;
use DateTimeZone;
use Illuminate\Database\Seeder;
class AdminUserSeeder extends Seeder
{
public function __construct(
private UserRepository $userRepo,
private PasswordHasher $hasher,
) {}
public function run(): void
{
$email = config('seed.admin.email', 'admin@tide.test');
$displayName = config('seed.admin.display_name', 'admin');
$password = config('seed.admin.password', 'changemenow');
$emailVo = new EmailAddress($email);
if ($this->userRepo->findByEmail($emailVo) !== null) {
return;
}
$now = new DateTimeImmutable('now', new DateTimeZone('UTC'));
$created = $this->userRepo->create(new CreateUserDto(
email: $emailVo,
displayName: $displayName,
passwordHash: $this->hasher->hash($password),
isAdmin: false,
emailConfirmedAt: $now,
));
$this->userRepo->update(new User(
id: $created->getId(),
email: $created->getEmail(),
displayName: $created->getDisplayName(),
passwordHash: $created->getPasswordHash(),
isAdmin: true,
emailConfirmedAt: $now,
));
}
}