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.
49 lines
1.4 KiB
PHP
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,
|
|
));
|
|
}
|
|
}
|