From 82d8f4b94f4c6dcc186ee49dc01e730cdda63cad Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 19 Feb 2026 09:14:15 +0700 Subject: [PATCH] feat: Add OrderSeeder to DatabaseSeeder for order data initialization --- database/factories/OrderFactory.php | 48 +++++++++++++++++++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/OrderSeeder.php | 17 ++++++++++ 3 files changed, 66 insertions(+) create mode 100644 database/factories/OrderFactory.php create mode 100644 database/seeders/OrderSeeder.php diff --git a/database/factories/OrderFactory.php b/database/factories/OrderFactory.php new file mode 100644 index 0000000..4811756 --- /dev/null +++ b/database/factories/OrderFactory.php @@ -0,0 +1,48 @@ + + */ +class OrderFactory extends Factory +{ + protected $model = Order::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $date = $this->faker->dateTimeBetween('-3 months', 'now'); + + $eggPrice = EggPrice::inRandomOrder()->first() ?? EggPrice::factory()->create(); + + $customer = Customer::inRandomOrder()->first() ?? Customer::factory()->create(); + + $eggQuantity = $this->faker->numberBetween(10, 500); + $unitPrice = $eggPrice->price; + $discount = $this->faker->optional(0.3)->numberBetween(5000, 50000) ?? 0; + $subtotal = $eggQuantity * $unitPrice; + $totalAmount = max(0, $subtotal - $discount); + + return [ + 'customer_id' => $customer->id, + 'unit_id' => $eggPrice->unit_id, + 'egg_quantity' => $eggQuantity, + 'unit_price' => $unitPrice, + 'order_date' => $date, + 'status' => $this->faker->randomElement(['pending', 'completed', 'cancelled']), + 'discount' => $discount, + 'total_amount' => $totalAmount, + 'notes' => $this->faker->optional(0.4)->sentence(), + ]; + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 387c479..0e88ac3 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,6 +24,7 @@ public function run(): void EggCollectionSeeder::class, CustomerSeeder::class, EggPriceSeeder::class, + OrderSeeder::class, ]); } } diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php new file mode 100644 index 0000000..82ea465 --- /dev/null +++ b/database/seeders/OrderSeeder.php @@ -0,0 +1,17 @@ +count(30)->create(); + } +}