|
2 | 2 |
|
3 | 3 | namespace Modules\Blog\Database\Seeders;
|
4 | 4 |
|
| 5 | +use Illuminate\Database\Eloquent\Factories\Sequence; |
5 | 6 | use Illuminate\Database\Seeder;
|
| 7 | +use Illuminate\Filesystem\Filesystem; |
6 | 8 | use Illuminate\Support\Facades\Schema;
|
7 | 9 | use Illuminate\Support\Facades\Storage;
|
8 | 10 | use Modules\Blog\Models\Author;
|
9 | 11 | use Modules\Blog\Models\Category;
|
10 | 12 | use Modules\Blog\Models\Post;
|
11 |
| - |
12 | 13 | use function Laravel\Prompts\info;
|
13 |
| -use function Laravel\Prompts\progress; |
14 | 14 |
|
15 | 15 | class BlogSeeder extends Seeder
|
16 | 16 | {
|
| 17 | + |
| 18 | + //These images are available at: resources/images/blog . Just copy them to storage/app/public/blog as mentioned in the README.md |
| 19 | + |
| 20 | + private $blogCategoriesImages = [ |
| 21 | + '57b76f29-dd7d-4018-b172-a06e6ef4a4cf.jpg', |
| 22 | + 'f0d5596c-d23a-4db7-97a5-9a298b924994.jpg', |
| 23 | + '44a928b1-5148-4940-af48-2792f1151272.jpg', |
| 24 | + '5febe62d-d9bd-4054-b5a1-83b796ca9d14.jpg', |
| 25 | + '9ab99b32-1f04-495e-b5a2-5fa789dedd18.jpg', |
| 26 | + '24521518-b796-445f-8e9a-59233d8d78fa.jpg', |
| 27 | + '0d2dc407-6b6f-4022-9565-1ecec79daf52.jpg', |
| 28 | + '153cfa68-8ca8-4712-a1c1-1bd969796ef9.jpg', |
| 29 | + '3d7da554-1a6c-44f6-9f9f-2a6947446a65.jpg', |
| 30 | + 'cd2dc303-24c8-41b3-b09e-83205a647d8f.jpg', |
| 31 | + 'edb880ab-4e13-4594-b6d1-fa4125a00100.jpg', |
| 32 | + '034cb604-d3d0-448b-92f1-6a255fb4653d.jpg', |
| 33 | + ]; |
| 34 | + |
| 35 | + private $blogAuthorsImages = [ |
| 36 | + 'a98ea6d4-9f8b-4897-9c63-bdafc1acd602.jpg', |
| 37 | + '77aa4a7a-de06-4ae6-8a1d-42322f532c53.jpg', |
| 38 | + 'da4bc233-b12b-4548-904c-b3cf70711607.jpg', |
| 39 | + 'b51306e7-f8f8-49b3-9083-e3fffccad1b4.jpg', |
| 40 | + '8c183760-1de3-4f6a-bef6-7241e7ebbb2f.jpg', |
| 41 | + 'dc44c3b1-6de3-4c47-80bb-e28de18f314b.jpg', |
| 42 | + '850e4903-66fe-4feb-a218-64058bb84a6a.jpg', |
| 43 | + 'cf45d6f9-0ff0-41ae-966b-a7fa50f08e33.jpg', |
| 44 | + 'fe15a944-36e4-4c0b-a634-f9e6c00df101.jpg', |
| 45 | + '15dcfc3d-f8f4-470e-9477-72322e399731.jpg', |
| 46 | + '735aa22c-6aa0-4ced-9552-5494f0da4e5e.jpg', |
| 47 | + 'bac12f21-8eaa-437e-bf0c-2ae84ca2b02a.jpg', |
| 48 | + ]; |
| 49 | + |
| 50 | + private $blogPostsImages = [ |
| 51 | + 'faa02464-6d3e-49b9-a45c-de303c91f3d5.jpg', |
| 52 | + '49814997-b619-4281-842f-8729f2ec151c.jpg', |
| 53 | + 'e9d82a31-b7a2-46d8-9da4-48f51f4207aa.jpg', |
| 54 | + 'e42eefc0-7f34-4645-ba21-d9c931daf08f.jpg', |
| 55 | + 'f5e456c2-de4b-48c2-9554-54b8b8e7bfbc.jpg', |
| 56 | + '2a7f2576-82a1-4f28-9f38-5a9cc216ba16.jpg', |
| 57 | + '94ab2a3f-2300-4754-b458-2cc36cceac05.jpg', |
| 58 | + 'e6ebdade-56ec-4d59-9da2-cf479b7d8c46.jpg', |
| 59 | + 'f6d0c648-5d59-4b96-9c44-ebdc0ba3ee38.jpg', |
| 60 | + '3fe0425a-96a4-49b5-bcde-adf75caa626d.jpg', |
| 61 | + '500862ad-b078-4306-9348-39edf65f6d05.jpg', |
| 62 | + '2348a092-55d0-4b6d-b43d-3b34280dbed9.jpg', |
| 63 | + '57135dbe-7d31-4380-85cd-b78179ca2400.jpg', |
| 64 | + '75fca485-2ea3-47d0-b609-9c8bd58d3438.jpg', |
| 65 | + '4c798d2c-c4a6-4293-b052-98a048914215.jpg', |
| 66 | + 'b8cac8c5-c3d2-4a65-8ebb-1b74059fe309.jpg', |
| 67 | + '952536c8-e74c-4089-bce4-3cc3b474a2d2.jpg', |
| 68 | + '5f4ecece-6275-41b9-bd64-0e6f904a5df7.jpg', |
| 69 | + '463c0606-1382-49b3-8ba5-3a3b91c4ff09.jpg', |
| 70 | + 'd27f5f87-f8dd-47df-8b2e-5086a5ba66c1.jpg', |
| 71 | + '5a888786-090c-40f1-85e0-f86895311eeb.jpg', |
| 72 | + '68255060-d85e-4081-a025-931789e6aa1d.jpg', |
| 73 | + '4e8d6a91-e0ef-48aa-86cd-8d18699407c3.jpg', |
| 74 | + '548857a2-c1b5-490e-b3a2-20a28ba98e0f.jpg', |
| 75 | + ]; |
| 76 | + |
17 | 77 | public function run(): void
|
18 | 78 | {
|
19 |
| - Storage::deleteDirectory('public/blog'); |
| 79 | + $this->setupBlogImages(); |
20 | 80 |
|
21 | 81 | Schema::disableForeignKeyConstraints();
|
22 | 82 |
|
23 | 83 | info('Creating blog categories...');
|
24 |
| - $this->seedWithProgress( |
25 |
| - label: 'Categories creation status', |
26 |
| - steps: 12, |
27 |
| - callback: fn () => Category::factory()->create(), |
28 |
| - ); |
| 84 | + Category::factory()->count(12) |
| 85 | + ->sequence(fn(Sequence $sequence) => ['image' => $this->blogCategoriesImages[$sequence->index]]) |
| 86 | + ->create(); |
29 | 87 | info('Blog categories created.');
|
30 | 88 |
|
31 | 89 | info('Creating blog authors...');
|
32 |
| - $this->seedWithProgress( |
33 |
| - label: 'Authors creation status', |
34 |
| - steps: 12, |
35 |
| - callback: fn () => Author::factory()->create(), |
36 |
| - ); |
| 90 | + Author::factory()->count(12) |
| 91 | + ->sequence(fn(Sequence $sequence) => ['image' => $this->blogAuthorsImages[$sequence->index]]) |
| 92 | + ->create(); |
37 | 93 | info('Blog authors created.');
|
38 | 94 |
|
39 | 95 | info('Creating blog posts...');
|
40 |
| - $this->seedWithProgress( |
41 |
| - label: 'Posts creation status', |
42 |
| - steps: 24, |
43 |
| - callback: fn () => Post::factory()->create(), |
44 |
| - ); |
| 96 | + Post::factory()->count(24) |
| 97 | + ->sequence(fn(Sequence $sequence) => ['image' => $this->blogPostsImages[$sequence->index]]) |
| 98 | + ->create(); |
45 | 99 | info('Blog posts created.');
|
46 | 100 |
|
47 | 101 | Schema::enableForeignKeyConstraints();
|
48 | 102 | }
|
49 | 103 |
|
50 |
| - private function seedWithProgress(string $label, int $steps, callable $callback): void |
| 104 | + private function setupBlogImages(): void |
51 | 105 | {
|
52 |
| - progress( |
53 |
| - label: $label, |
54 |
| - steps: $steps, |
55 |
| - callback: $callback, |
56 |
| - ); |
| 106 | + Storage::deleteDirectory('public/blog'); |
| 107 | + info('Copying blog images...'); |
| 108 | + |
| 109 | + (new Filesystem)->ensureDirectoryExists(base_path('storage/app/public/blog')); |
| 110 | + (new Filesystem)->copyDirectory(base_path('resources/images/blog'), base_path('storage/app/public/blog')); |
| 111 | + |
| 112 | + info('The blog images were copied.'); |
57 | 113 | }
|
58 | 114 | }
|
0 commit comments