feature - 22 - demo planner seeding

This commit is contained in:
myrmidex 2026-01-08 01:58:02 +01:00
parent c80891b25e
commit f78d97dae5
2 changed files with 118 additions and 5 deletions

View file

@ -4,8 +4,10 @@
use App\Models\Planner; use App\Models\Planner;
use Closure; use Closure;
use DishPlanner\Planner\Actions\SeedDemoPlannerAction;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@ -22,11 +24,17 @@ public function handle(Request $request, Closure $next): Response
return $next($request); return $next($request);
} }
$planner = Planner::create([ $planner = DB::transaction(function () {
'name' => 'Demo User', $planner = Planner::create([
'email' => 'demo-' . Str::uuid() . '@demo.local', 'name' => 'Demo User',
'password' => Hash::make(Str::random(32)), 'email' => 'demo-' . Str::uuid() . '@demo.local',
]); 'password' => Hash::make(Str::random(32)),
]);
resolve(SeedDemoPlannerAction::class)->execute($planner);
return $planner;
});
Auth::login($planner); Auth::login($planner);

View file

@ -0,0 +1,105 @@
<?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);
}
}