app/src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php

106 lines
2.7 KiB
PHP
Raw Normal View History

2026-01-08 01:58:02 +01:00
<?php
namespace DishPlanner\Planner\Actions;
use App\Models\Dish;
use App\Models\Planner;
use App\Models\User;
use DishPlanner\Schedule\Actions\GenerateScheduleForPeriodAction;
class SeedDemoPlannerAction
{
private array $dishNames = [
'Spaghetti Bolognese',
'Chicken Curry',
'Caesar Salad',
'Beef Stir Fry',
'Vegetable Lasagna',
'Fish Tacos',
'Mushroom Risotto',
'BBQ Ribs',
'Greek Salad',
'Pad Thai',
'Margherita Pizza',
'Beef Burger',
'Chicken Fajitas',
'Vegetable Soup',
'Salmon Teriyaki',
'Lamb Chops',
'Shrimp Scampi',
'Pulled Pork Sandwich',
'Caprese Salad',
'Beef Tacos',
'Chicken Alfredo',
'Vegetable Curry',
'Pork Schnitzel',
'Tuna Poke Bowl',
'Beef Stroganoff',
'Chicken Parmesan',
'Ratatouille',
'Fish and Chips',
'Lamb Kebabs',
'Shrimp Fried Rice',
'Pork Tenderloin',
'Nicoise Salad',
'Beef Burritos',
'Chicken Tikka Masala',
'Eggplant Parmesan',
'Grilled Salmon',
'Lamb Tagine',
'Lobster Roll',
'Pork Belly',
'Waldorf Salad',
'Beef Wellington',
'Chicken Satay',
'Stuffed Peppers',
'Miso Glazed Cod',
'Lamb Shanks',
'Crab Cakes',
'Pork Carnitas',
'Cobb Salad',
'Beef Enchiladas',
'Chicken Shawarma',
];
public function execute(Planner $planner): void
{
$users = $this->createUsers($planner);
$this->createDishes($planner, $users);
$this->generateSchedule($planner);
}
private function createUsers(Planner $planner): array
{
$names = ['Alice', 'Bob', 'Charlie'];
return array_map(
fn (string $name) => User::create([
'planner_id' => $planner->id,
'name' => $name,
]),
$names
);
}
private function createDishes(Planner $planner, array $users): void
{
foreach ($this->dishNames as $dishName) {
$dish = Dish::create([
'planner_id' => $planner->id,
'name' => $dishName,
]);
// Randomly assign dish to 1-3 users
$count = rand(1, count($users));
$assignedUsers = collect($users)->random($count);
$userIds = $count === 1 ? [$assignedUsers->id] : $assignedUsers->pluck('id');
$dish->users()->attach($userIds);
}
}
private function generateSchedule(Planner $planner): void
{
resolve(GenerateScheduleForPeriodAction::class)->execute($planner);
}
}