diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..c853ea1 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,87 @@ +paragraphs(fake()->numberBetween(1, 4))) + ->map(fn(string $paragraph): string => "
{$paragraph}
") + ->implode(''); + } + + public function run(RefreshAllThreads $refreshAllThreads): void + { + $users = User::factory()->count(5)->create(); + + // Single-email threads spread over the past year + Email::factory() + ->count(15) + ->state(fn(): array => ['content' => self::htmlBody()]) + ->create(); + + // Threads with ongoing discussion + Email::factory() + ->count(8) + ->state(fn(): array => ['content' => self::htmlBody()]) + ->create() + ->each(fn(Email $root) => $this->addReplies($root, fake()->numberBetween(2, 8))); + + // RFC threads (picked up by the RFC feed, which matches on subject) + Email::factory() + ->count(3) + ->state(fn(): array => [ + 'subject' => '[RFC] ' . fake()->sentence(4), + 'content' => self::htmlBody(), + ]) + ->create() + ->each(fn(Email $root) => $this->addReplies($root, fake()->numberBetween(2, 6))); + + // Recent upvoted threads, so the "Top" page has content + // (it only lists threads with votes > 0 updated within the last month) + Email::factory() + ->count(5) + ->state(function (): array { + $date = fake()->dateTimeBetween('-3 weeks', 'now')->format('Y-m-d H:i:s'); + + return ['content' => self::htmlBody(), 'date' => $date, 'fetchDate' => $date]; + }) + ->create() + ->each(function (Email $root) use ($users): void { + $this->addReplies($root, fake()->numberBetween(1, 5)); + + $users->random(fake()->numberBetween(1, $users->count())) + ->each(fn(User $user) => Vote::factory()->create([ + 'userId' => $user->id, + 'emailNumber' => $root->number, + 'value' => 1, + ])); + }); + + $refreshAllThreads->handle(); + } + + private function addReplies(Email $root, int $count): void + { + Email::factory() + ->count($count) + ->replyTo($root) + ->state(function () use ($root): array { + $date = fake() + ->dateTimeBetween($root->date->format('Y-m-d H:i:s'), 'now') + ->format('Y-m-d H:i:s'); + + return ['content' => self::htmlBody(), 'date' => $date, 'fetchDate' => $date]; + }) + ->create(); + } +} diff --git a/resources/views/components/layouts/app.blade.php b/resources/views/components/layouts/app.blade.php index c66110d..05b8ff2 100644 --- a/resources/views/components/layouts/app.blade.php +++ b/resources/views/components/layouts/app.blade.php @@ -37,6 +37,10 @@ + +