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.
This commit is contained in:
Yisroel Baum 2026-05-06 22:38:14 +03:00
parent c55852ec12
commit beb4ddd1e9
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
6 changed files with 213 additions and 9 deletions

View file

@ -0,0 +1,42 @@
<?php
namespace Database\Seeders;
use App\Auth\PasswordHasher;
use App\Shared\ValueObject\EmailAddress;
use App\User\CreateUserDto;
use App\User\UserRepository;
use DateTimeImmutable;
use DateTimeZone;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function __construct(
private UserRepository $userRepo,
private PasswordHasher $hasher,
) {}
public function run(): void
{
$now = new DateTimeImmutable('now', new DateTimeZone('UTC'));
$samples = [
['email' => 'alice@example.com', 'displayName' => 'alice'],
['email' => 'bob@example.com', 'displayName' => 'bob'],
['email' => 'carol@example.com', 'displayName' => 'carol'],
];
foreach ($samples as $sample) {
$email = new EmailAddress($sample['email']);
if ($this->userRepo->findByEmail($email) !== null) {
continue;
}
$this->userRepo->create(new CreateUserDto(
email: $email,
displayName: $sample['displayName'],
passwordHash: $this->hasher->hash('longenoughpassword'),
isAdmin: false,
emailConfirmedAt: $now,
));
}
}
}