Files
jouwdriedee/database/seeders/DatabaseSeeder.php
T

318 lines
18 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Category;
use App\Models\Color;
use App\Models\Material;
use App\Models\Product;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
// 0. Hoofdbeheerder (Admin) met sterk willekeurig wachtwoord
User::updateOrCreate(
['email' => 'info@jouwdriedee.nl'],
[
'name' => 'Jouwdriedee Beheer',
'password' => Hash::make('Jw3D!x9#QmK7$vR2'),
'is_admin' => true,
'email_verified_at' => now(),
]
);
// 1. Materialen
$materials = [
[
'name' => 'Bio-PLA+ Filament',
'code' => 'pla',
'description' => 'Hoogwaardig plantaardig filament. Reukloos, biologisch afbreekbaar en ideaal voor strakke details zonder krimp.',
'badge_color' => 'emerald',
'price_multiplier' => 1.00,
],
[
'name' => 'PETG Tough',
'code' => 'petg',
'description' => 'Slagvast, waterdicht en hittebestendig tot 75°C. Geschikt voor functionele items en plantenpotjes.',
'badge_color' => 'blue',
'price_multiplier' => 1.20,
],
[
'name' => 'TPU 95A Flexibel',
'code' => 'tpu',
'description' => 'Slijtvast rubberachtig elastomeer. Buigzaam, schokabsorberend en nagenoeg onbreekbaar.',
'badge_color' => 'amber',
'price_multiplier' => 1.35,
],
[
'name' => 'Silk Zijdeglans PLA',
'code' => 'silk',
'description' => 'Zijdezachte glansafwerking met metallic reflectie bij lichtinval. Perfect voor display-modellen.',
'badge_color' => 'purple',
'price_multiplier' => 1.25,
],
];
foreach ($materials as $m) {
Material::updateOrCreate(['code' => $m['code']], $m);
}
// 2. Kleuren
$colors = [
['name' => 'Zon Geel (Pikachu)', 'hex' => '#FBBF24', 'in_stock' => true],
['name' => 'Vurig Rood (Charizard)', 'hex' => '#EF4444', 'in_stock' => true],
['name' => 'Hemelsblauw (Squirtle)', 'hex' => '#38BDF8', 'in_stock' => true],
['name' => 'Muntgroen (Bulbasaur)', 'hex' => '#34D399', 'in_stock' => true],
['name' => 'Spooky Paars (Gengar)', 'hex' => '#A855F7', 'in_stock' => true],
['name' => 'Koper Zijdeglans', 'hex' => '#D97706', 'in_stock' => true],
['name' => 'Regenboog Multi-Color', 'hex' => '#EC4899', 'in_stock' => true],
['name' => 'Mat Zwart', 'hex' => '#1E293B', 'in_stock' => true],
['name' => 'Sneeuwwit', 'hex' => '#F8FAFC', 'in_stock' => true],
];
foreach ($colors as $c) {
Color::updateOrCreate(['name' => $c['name']], $c);
}
// 3. Categorieën
$catFidget = Category::updateOrCreate(['slug' => 'fidget-toys'], [
'name' => 'Fidget Toys & Sensory',
'slug' => 'fidget-toys',
'description' => 'Scharnierende draken, flexibele slakken en compacte cubes met soepele print-in-place verbindingen.',
'icon' => 'sparkles',
'is_featured' => true,
'sort_order' => 1,
]);
$catPokemon = Category::updateOrCreate(['slug' => 'pokemon-3d'], [
'name' => 'Pokémon 3D Prints',
'slug' => 'pokemon-3d',
'description' => 'Gedetailleerde figuren, low-poly planters voor vetplantjes en sluitende Pokéballs op schaal.',
'icon' => 'zap',
'is_featured' => true,
'sort_order' => 2,
]);
$catFilm = Category::updateOrCreate(['slug' => 'film-popculture'], [
'name' => 'Film, Gaming & Collectibles',
'slug' => 'film-popculture',
'description' => 'Displaystandaarden, bureau-accessoires en busts van iconische personages uit popcultuur en gaming.',
'icon' => 'film',
'is_featured' => true,
'sort_order' => 3,
]);
Category::whereNotIn('slug', ['fidget-toys', 'pokemon-3d', 'film-popculture'])->delete();
// 4. Producten met accurate lokale foto's & strakke teksten
Product::truncate();
$products = [
// --- FIDGET TOYS ---
[
'category_id' => $catFidget->id,
'name' => 'Articulated Kristaldraak (45 cm)',
'slug' => 'articulated-kristaldraak-flexibel',
'short_description' => 'Volledig scharnierende print-in-place draak met tientallen soepele schakels. Rustgevend in de hand en een blikvanger op het bureau.',
'description' => "Deze kristaldraak wordt in één sessie geprint zonder montage of losse onderdelen. Dankzij de ingenieuze kogel- en komgewrichten beweegt het lichaam vloeiend en natuurlijk.\n\nGeprint op professionele Bambu Lab X1-Carbon printers met 0.16 mm laaghoogte voor strakke facetten en minimale naadvorming. Prachtig in glanzend zijdeglans koper of rainbow filament.",
'base_price' => 17.95,
'sku' => 'J3D-FID-DRAAK',
'is_featured' => true,
'dimensions' => '45 x 6 x 4 cm',
'weight_grams' => 135,
'print_time_hours' => 6.5,
'image_url' => '/images/products/crystal-dragon.jpg',
'available_materials' => ['pla', 'silk'],
'available_colors' => ['Regenboog Multi-Color', 'Koper Zijdeglans', 'Spooky Paars (Gengar)', 'Hemelsblauw (Squirtle)', 'Mat Zwart'],
],
[
'category_id' => $catFidget->id,
'name' => 'Articulated Fidget Slug (18 cm)',
'slug' => 'articulated-fidget-slug-wriemel-slak',
'short_description' => 'Flexibele slak opgebouwd uit in elkaar grijpende ringen. Beweegt soepel en maakt een zacht, bevredigend ratelend geluid.',
'description' => "De klassieke Fidget Slug bestaat uit een reeks concentrische ringen die vrij over elkaar glijden. Hierdoor vormt hij zich direct naar je handpalm en geeft hij een subtiel tastbaar en auditief effect dat helpt bij concentratie tijdens het werken of studeren.\n\nGemaakt van duurzaam, kindvriendelijk PLA+ plastic.",
'base_price' => 9.95,
'sku' => 'J3D-FID-SLUG',
'is_featured' => true,
'dimensions' => '18 x 5 x 4 cm',
'weight_grams' => 75,
'print_time_hours' => 3.5,
'image_url' => '/images/products/fidget-slug.jpg',
'available_materials' => ['pla', 'silk'],
'available_colors' => ['Regenboog Multi-Color', 'Zon Geel (Pikachu)', 'Muntgroen (Bulbasaur)', 'Hemelsblauw (Squirtle)'],
],
[
'category_id' => $catFidget->id,
'name' => 'Infinity Fidget Cube (4 x 4 cm)',
'slug' => 'infinity-fidget-cube-oneindige-kubus',
'short_description' => 'Geometrische kubus bestaande uit 8 scharnierende blokken die oneindig in elke richting omgevouwen kunnen worden.',
'description' => "Met uiterste precisie gekalibreerd zodat de scharnieren direct na het printen soepel vouwen zonder speling. Compact genoeg voor je broekzak en een ideale tool tegen onrustige handen achter het beeldscherm.\n\nVerkrijgbaar in strak mat zwart, tweekleurige varianten of opvallende filamenttinten.",
'base_price' => 11.50,
'sku' => 'J3D-FID-CUBE',
'is_featured' => false,
'dimensions' => '4 x 4 x 4 cm',
'weight_grams' => 50,
'print_time_hours' => 2.5,
'image_url' => '/images/products/infinity-cube.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Mat Zwart', 'Zon Geel (Pikachu)', 'Hemelsblauw (Squirtle)', 'Spooky Paars (Gengar)'],
],
[
'category_id' => $catFidget->id,
'name' => 'Gyroscope Tri-Ring Desk Spinner',
'slug' => 'gyroscope-tri-ring-fidget-spinner',
'short_description' => 'Drie concentrische ringen die onafhankelijk over meerdere assen tuimelen. Rustgevende kinetische beweging.',
'description' => 'Geïnspireerd op mechanische gyroscopen. De ringen draaien vloeiend in elkaar en creëren een dynamisch patroon wanneer je de spinner in beweging zet. Zowel met de hand te bedienen als als stijlvol bureau-object neer te zetten.',
'base_price' => 8.95,
'sku' => 'J3D-FID-GYRO',
'is_featured' => false,
'dimensions' => '7 x 7 x 1 cm',
'weight_grams' => 35,
'print_time_hours' => 2.0,
'image_url' => '/images/products/gyro-spinner.jpg',
'available_materials' => ['pla', 'silk'],
'available_colors' => ['Regenboog Multi-Color', 'Koper Zijdeglans', 'Zon Geel (Pikachu)'],
],
// --- POKÉMON 3D PRINTS ---
[
'category_id' => $catPokemon->id,
'name' => 'Low-Poly Pikachu Planter & Pennenhouder',
'slug' => 'low-poly-pikachu-plantenpotje',
'short_description' => 'Geometrische low-poly Pikachu met geïntegreerde uitsparing voor kleine vetplantjes, cactussen of pennen.',
'description' => "Een moderne interpretatie van de iconische gele Pokémon. De scherpe geometrische facetten vangen het omgevingslicht prachtig op. Bovenin zit een potuitsparing van ca. 6 cm doorsnede, voorzien van stabiele bodem.\n\nIdeaal als groen accent op je bureau of vensterbank.",
'base_price' => 14.95,
'sku' => 'J3D-POK-PIKA',
'is_featured' => true,
'dimensions' => '12 x 10 x 14 cm',
'weight_grams' => 110,
'print_time_hours' => 4.5,
'image_url' => '/images/products/pikachu-planter.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Zon Geel (Pikachu)', 'Sneeuwwit', 'Mat Zwart', 'Koper Zijdeglans'],
],
[
'category_id' => $catPokemon->id,
'name' => 'Articulated Charizard (32 cm)',
'slug' => 'articulated-beweegbare-charizard-draak',
'short_description' => 'Scharnierende vuurdraak met beweegbare staartsegmenten, kop en verstelbare vleugels.',
'description' => "Een indrukwekkend staaltje 3D printtechniek. Charizard is ontworpen met flexibele staartgeledingen en afzonderlijk scharnierende vleugels, waardoor hij in verschillende actiehoudingen geposeerd kan worden.\n\nGeprint in levendig oranje/rood of stealth matzwart PLA+ met 0.12 mm laaghoogte voor maximale scherpte.",
'base_price' => 22.50,
'sku' => 'J3D-POK-CHAR',
'is_featured' => true,
'dimensions' => '32 x 20 x 8 cm',
'weight_grams' => 160,
'print_time_hours' => 7.5,
'image_url' => '/images/products/charizard-dragon.jpg',
'available_materials' => ['pla', 'silk'],
'available_colors' => ['Vurig Rood (Charizard)', 'Mat Zwart', 'Koper Zijdeglans', 'Zon Geel (Pikachu)'],
],
[
'category_id' => $catPokemon->id,
'name' => 'Pokéball Opbergbox met Scharnier & Knop',
'slug' => 'pokeball-opbergdoosje-met-kliksluiting',
'short_description' => 'Precieze replica op ware grootte (8 cm) met functioneel veerscharnier en drukknop-sluiting.',
'description' => 'Opgebouwd uit meervoudige precisie-onderdelen in klassiek rood, wit en zwart. De witte middenknop ontgrendelt het mechanische scharnier waarna de bal openklapt. Handig als opbergdoosje voor ringen, kleine kabels, dobbelstenen of als verzamelitem op de plank.',
'base_price' => 13.95,
'sku' => 'J3D-POK-BALL',
'is_featured' => false,
'dimensions' => '8 x 8 x 8 cm',
'weight_grams' => 85,
'print_time_hours' => 4.0,
'image_url' => '/images/products/pokeball-box.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Vurig Rood (Charizard)', 'Spooky Paars (Gengar)', 'Hemelsblauw (Squirtle)'],
],
[
'category_id' => $catPokemon->id,
'name' => 'Bulbasaur Succulent Planter',
'slug' => 'bulbasaur-geometrisch-vetplant-potje',
'short_description' => 'Geometrische Bulbasaur met ruime ruguitsparing voor echte vetplantjes of kleine cactussen.',
'description' => "Plaats een echt vetplantje op de rug van Bulbasaur om zijn iconische plantenbol compleet te maken. De plantpot is voorzien van een waterafvoer-kanaal aan de onderzijde bij gebruik van levende beplanting.\n\nGeprint in fris muntgroen PLA+ dat vochtbestendig en kleurvast blijft.",
'base_price' => 14.95,
'sku' => 'J3D-POK-BULBA',
'is_featured' => false,
'dimensions' => '13 x 10 x 9 cm',
'weight_grams' => 105,
'print_time_hours' => 4.0,
'image_url' => '/images/products/bulbasaur-planter.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Muntgroen (Bulbasaur)', 'Sneeuwwit', 'Hemelsblauw (Squirtle)'],
],
[
'category_id' => $catPokemon->id,
'name' => 'Gengar Desk Figuur (Zijdeglans)',
'slug' => 'gengar-grijns-schaduw-figuur',
'short_description' => 'Gedetailleerd model van Gengar met zijn brede grijns, spitse oren en gemene ogen.',
'description' => "Een massief geprint display-item met strakke rondingen en gedetailleerde gezichtscontouren. Komt bijzonder sterk tot zijn recht in glanzend zijdepaars of matzwart filament.\n\nStaat stevig op elke ondergrond dankzij een verzwaard zwaartepunt.",
'base_price' => 16.95,
'sku' => 'J3D-POK-GENG',
'is_featured' => true,
'dimensions' => '11 x 11 x 10 cm',
'weight_grams' => 120,
'print_time_hours' => 5.0,
'image_url' => '/images/products/gengar-figure.jpg',
'available_materials' => ['pla', 'silk'],
'available_colors' => ['Spooky Paars (Gengar)', 'Mat Zwart', 'Sneeuwwit'],
],
// --- FILM, GAMING & POPCULTURE ---
[
'category_id' => $catFilm->id,
'name' => 'Grogu (Baby Yoda) Gedetailleerd Display Beeld',
'slug' => 'grogu-baby-yoda-3d-bureaufiguur',
'short_description' => 'Hoge-resolutie 3D print van Grogu in zijn karakteristieke mantel met grote oren.',
'description' => 'Geprint met een fijne laaghoogte van 0.12 mm om de textuur van de mantel en gelaatstrekken haarscherp weer te geven. Een must-have voor Star Wars liefhebbers op zoek naar een kwalitatief displaystuk voor in de vitrine of naast het toetsenbord.',
'base_price' => 19.95,
'sku' => 'J3D-POP-GROGU',
'is_featured' => true,
'dimensions' => '12 x 14 x 10 cm',
'weight_grams' => 140,
'print_time_hours' => 6.0,
'image_url' => '/images/products/grogu-figure.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Muntgroen (Bulbasaur)', 'Sneeuwwit', 'Koper Zijdeglans', 'Mat Zwart'],
],
[
'category_id' => $catFilm->id,
'name' => 'Lightsaber Horizontale Displaystandaard',
'slug' => 'lightsaber-horizontale-bureaustandaard',
'short_description' => 'Universele wieg-standaard in matzwart voor het horizontaal tentoonstellen van lightsaber hilts en props.',
'description' => "Strak minimalistisch ontworpen om de aandacht volledig op je verzamelobject te houden. De uitsparingen zijn voorzien van afgeronde randen die krassen op het metaal of kunststof van je hilt voorkomen.\n\nGeschikt voor hilts tot 45 mm diameter.",
'base_price' => 15.95,
'sku' => 'J3D-POP-SABER',
'is_featured' => false,
'dimensions' => '22 x 7 x 8 cm',
'weight_grams' => 100,
'print_time_hours' => 4.0,
'image_url' => '/images/products/lightsaber-stand.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Mat Zwart', 'Sneeuwwit', 'Galaxy Grijs'],
],
[
'category_id' => $catFilm->id,
'name' => "Marvel Thor's Mjolnir Bureau-Organizer",
'slug' => 'marvel-thors-mjolnir-pennenhouder',
'short_description' => 'De mythische hamer van Thor rustend in een rotsachtig plateau met vakken voor pennen en schrijfwaren.',
'description' => 'Geprint in een steenachtige textuur met robuuste wanddikte. De rotsvormige basis biedt een stevige standaard en voorkomt omvallen, terwijl de bovenkant praktische opbergruimte biedt voor pennen, stylussen en usb-sticks.',
'base_price' => 18.50,
'sku' => 'J3D-POP-THOR',
'is_featured' => true,
'dimensions' => '14 x 12 x 15 cm',
'weight_grams' => 175,
'print_time_hours' => 6.5,
'image_url' => '/images/products/thor-mjolnir.jpg',
'available_materials' => ['pla', 'petg'],
'available_colors' => ['Mat Zwart', 'Koper Zijdeglans', 'Sneeuwwit'],
],
];
foreach ($products as $p) {
Product::create($p);
}
}
}