From 5c068017b24561c3b833bec75f98e7022dcea95c Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 9 Mar 2026 13:57:04 +0700 Subject: [PATCH] feat: Implement `Warehouse` and `EggCollectionItem` factories, updating `EggCollection` factory and seeder for item and warehouse management. --- database/factories/EggCollectionFactory.php | 4 +-- .../factories/EggCollectionItemFactory.php | 28 +++++++++++++++++++ database/factories/WarehouseFactory.php | 21 ++++++++++++++ database/seeders/EggCollectionSeeder.php | 10 ++++++- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 database/factories/EggCollectionItemFactory.php create mode 100644 database/factories/WarehouseFactory.php diff --git a/database/factories/EggCollectionFactory.php b/database/factories/EggCollectionFactory.php index a22a42f..461be24 100644 --- a/database/factories/EggCollectionFactory.php +++ b/database/factories/EggCollectionFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use App\Models\EggCollection; +use App\Models\Warehouse; use Illuminate\Database\Eloquent\Factories\Factory; /** @@ -18,8 +19,7 @@ public function definition(): array return [ 'production_date' => $dateTime, - 'total_eggs' => fake()->numberBetween(500, 1500), - 'total_broken_eggs' => fake()->numberBetween(0, 100), + 'warehouse_id' => Warehouse::first()?->id ?? Warehouse::factory(), 'notes' => $this->faker->optional(0.4)->sentence(), ]; } diff --git a/database/factories/EggCollectionItemFactory.php b/database/factories/EggCollectionItemFactory.php new file mode 100644 index 0000000..46f0781 --- /dev/null +++ b/database/factories/EggCollectionItemFactory.php @@ -0,0 +1,28 @@ + + */ +class EggCollectionItemFactory extends Factory +{ + protected $model = EggCollectionItem::class; + + public function definition(): array + { + $unit = Unit::whereIn('alias', ['butir', 'kg'])->inRandomOrder()->first() + ?? Unit::where('alias', 'butir')->first() + ?? Unit::factory(); + + return [ + 'unit_id' => $unit->id, + 'quantity' => $unit->alias === 'butir' ? fake()->numberBetween(50, 500) : fake()->randomFloat(2, 5, 50), + 'is_broken' => fake()->boolean(10), // 10% chance of being broken + ]; + } +} diff --git a/database/factories/WarehouseFactory.php b/database/factories/WarehouseFactory.php new file mode 100644 index 0000000..f9fca65 --- /dev/null +++ b/database/factories/WarehouseFactory.php @@ -0,0 +1,21 @@ + + */ +class WarehouseFactory extends Factory +{ + protected $model = Warehouse::class; + + public function definition(): array + { + return [ + 'name' => $this->faker->company().' Warehouse', + ]; + } +} diff --git a/database/seeders/EggCollectionSeeder.php b/database/seeders/EggCollectionSeeder.php index 3692548..324b641 100644 --- a/database/seeders/EggCollectionSeeder.php +++ b/database/seeders/EggCollectionSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders; use App\Models\EggCollection; +use App\Models\EggCollectionItem; use Illuminate\Database\Seeder; class EggCollectionSeeder extends Seeder @@ -12,6 +13,13 @@ class EggCollectionSeeder extends Seeder */ public function run(): void { - EggCollection::factory()->count(30)->create(); + EggCollection::factory() + ->count(30) + ->create() + ->each(function ($collection) { + EggCollectionItem::factory()->count(rand(1, 3))->create([ + 'egg_collection_id' => $collection->id, + ]); + }); } }