diff --git a/backend/config/seed.php b/backend/config/seed.php new file mode 100644 index 0000000..e7bc58a --- /dev/null +++ b/backend/config/seed.php @@ -0,0 +1,9 @@ + [ + 'email' => env('ADMIN_EMAIL', 'admin@tide.test'), + 'display_name' => env('ADMIN_DISPLAY_NAME', 'admin'), + 'password' => env('ADMIN_PASSWORD', 'changemenow'), + ], +]; diff --git a/backend/database/seeders/AdminUserSeeder.php b/backend/database/seeders/AdminUserSeeder.php new file mode 100644 index 0000000..ea9890a --- /dev/null +++ b/backend/database/seeders/AdminUserSeeder.php @@ -0,0 +1,49 @@ +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, + )); + } +} diff --git a/backend/database/seeders/CommentSeeder.php b/backend/database/seeders/CommentSeeder.php new file mode 100644 index 0000000..1755bcd --- /dev/null +++ b/backend/database/seeders/CommentSeeder.php @@ -0,0 +1,53 @@ +userRepo->findByEmail( + new EmailAddress('bob@example.com'), + ); + $carol = $this->userRepo->findByEmail( + new EmailAddress('carol@example.com'), + ); + if ($bob === null || $carol === null) { + return; + } + $posts = $this->postRepo->findRecent(10); + if (count($posts) === 0) { + return; + } + $firstPost = $posts[0]; + + $this->commentRepo->create(new CreateCommentDto( + postId: $firstPost->getId(), + userId: $bob->getId(), + body: 'Welcome aboard!', + createdAt: $now, + )); + $this->commentRepo->create(new CreateCommentDto( + postId: $firstPost->getId(), + userId: $carol->getId(), + body: 'Looking forward to more.', + createdAt: $now->modify('+1 minute'), + )); + } +} diff --git a/backend/database/seeders/DatabaseSeeder.php b/backend/database/seeders/DatabaseSeeder.php index 6b901f8..603a20f 100644 --- a/backend/database/seeders/DatabaseSeeder.php +++ b/backend/database/seeders/DatabaseSeeder.php @@ -2,7 +2,6 @@ namespace Database\Seeders; -use App\Models\User; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -10,16 +9,13 @@ class DatabaseSeeder extends Seeder { use WithoutModelEvents; - /** - * Seed the application's database. - */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + $this->call([ + AdminUserSeeder::class, + UserSeeder::class, + PostSeeder::class, + CommentSeeder::class, ]); } } diff --git a/backend/database/seeders/PostSeeder.php b/backend/database/seeders/PostSeeder.php new file mode 100644 index 0000000..ccefd2f --- /dev/null +++ b/backend/database/seeders/PostSeeder.php @@ -0,0 +1,55 @@ + 'alice@example.com', + 'title' => 'Hello World', + 'body' => 'My first post on TIDE.', + ], + [ + 'email' => 'bob@example.com', + 'title' => 'Riding the wave', + 'body' => 'Bob shares his thoughts.', + ], + [ + 'email' => 'carol@example.com', + 'title' => 'Notes from week one', + 'body' => 'Carol lays out her plan.', + ], + ]; + foreach ($samples as $index => $sample) { + $author = $this->userRepo->findByEmail( + new EmailAddress($sample['email']), + ); + if ($author === null) { + continue; + } + $this->postRepo->create(new CreatePostDto( + userId: $author->getId(), + title: $sample['title'], + body: $sample['body'], + createdAt: $now->modify("-{$index} hour"), + )); + } + } +} diff --git a/backend/database/seeders/UserSeeder.php b/backend/database/seeders/UserSeeder.php new file mode 100644 index 0000000..c877477 --- /dev/null +++ b/backend/database/seeders/UserSeeder.php @@ -0,0 +1,42 @@ + '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, + )); + } + } +}