diff --git a/app/Models/Product.php b/app/Models/Product.php index bdbe184..09bfca0 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -10,5 +10,5 @@ class Product extends Model /** @use HasFactory<\Database\Factories\ProductFactory> */ use HasFactory; - protected $fillable = ['name', 'description', 'price_cents']; + protected $fillable = ['name', 'description', 'price_cents', 'image_url']; } diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php index 893baef..f431722 100644 --- a/database/factories/ProductFactory.php +++ b/database/factories/ProductFactory.php @@ -21,6 +21,7 @@ class ProductFactory extends Factory 'name' => $this->faker->words(3, true), 'description' => $this->faker->sentence(12), 'price_cents' => $this->faker->numberBetween(499, 9999), + 'image_url' => null, ]; } } diff --git a/database/migrations/2026_04_09_223718_add_image_to_products_table.php b/database/migrations/2026_04_09_223718_add_image_to_products_table.php new file mode 100644 index 0000000..d40ce02 --- /dev/null +++ b/database/migrations/2026_04_09_223718_add_image_to_products_table.php @@ -0,0 +1,28 @@ +string('image_url')->nullable()->after('description'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('products', function (Blueprint $table) { + $table->dropColumn('image_url'); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 05e9d07..c328fb2 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -16,29 +16,32 @@ class DatabaseSeeder extends Seeder { // User::factory(10)->create(); - //User::factory()->create([ - // 'name' => 'Test User', - // 'email' => 'test@example.com', - //]); + User::factory()->create([ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); Product::create([ - 'name' => 'Ant Spray', - 'description' => '', - 'price' => 10000, + 'name' => 'Ant Deterrant', + 'description' => 'A common problem we can easily take care of!', + 'price_cents' => 10000, + 'image_url' => 'https://shopping-cart.test/storage/products/ant.jpg' ]); Product::create([ - 'name' => 'Spider Spray', - 'description' => '', - 'price' => 25000, + 'name' => 'Spider Removal', + 'description' => 'More aggressive that just removing the little ones.', + 'price_cents' => 25000, + 'image_url' => 'https://shopping-cart.test/storage/products/spider.jpg' ]); Product::create([ - 'name' => 'Infestation Spray', - 'description' => '', - 'price' => 50000, + 'name' => 'Infestation Mitigation', + 'description' => 'Time to call in DOOM guy.', + 'price_cents' => 50000, + 'image_url' => 'https://shopping-cart.test/storage/products/hydralisk.webp' ]); } } diff --git a/resources/js/app.ts b/resources/js/app.ts index 2ed2760..af27c80 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -12,6 +12,7 @@ createInertiaApp({ layout: (name) => { switch (true) { case name === 'Welcome': + case name === 'Home': return null; case name.startsWith('auth/'): return AuthLayout; diff --git a/resources/js/pages/Home.vue b/resources/js/pages/Home.vue index b3e8d06..0f46a72 100644 --- a/resources/js/pages/Home.vue +++ b/resources/js/pages/Home.vue @@ -6,6 +6,7 @@ interface Product { name: string; description: string; price_cents: number; + image_url: string | null; } defineProps<{ @@ -22,21 +23,32 @@ function formatPrice(cents: number): string { -
+
-

Products

+

Packages

-

No products available.

+

No packages available.

-

{{ product.name }}

-

{{ product.description }}

-

{{ formatPrice(product.price_cents) }}

+ +
+ No image +
+
+

{{ product.name }}

+

{{ product.description }}

+

{{ formatPrice(product.price_cents) }}

+