feature - 22 - demo planner seeding
This commit is contained in:
parent
c80891b25e
commit
f78d97dae5
2 changed files with 118 additions and 5 deletions
|
|
@ -4,8 +4,10 @@
|
|||
|
||||
use App\Models\Planner;
|
||||
use Closure;
|
||||
use DishPlanner\Planner\Actions\SeedDemoPlannerAction;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
|
@ -22,12 +24,18 @@ public function handle(Request $request, Closure $next): Response
|
|||
return $next($request);
|
||||
}
|
||||
|
||||
$planner = DB::transaction(function () {
|
||||
$planner = Planner::create([
|
||||
'name' => 'Demo User',
|
||||
'email' => 'demo-' . Str::uuid() . '@demo.local',
|
||||
'password' => Hash::make(Str::random(32)),
|
||||
]);
|
||||
|
||||
resolve(SeedDemoPlannerAction::class)->execute($planner);
|
||||
|
||||
return $planner;
|
||||
});
|
||||
|
||||
Auth::login($planner);
|
||||
|
||||
return $next($request);
|
||||
|
|
|
|||
105
src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php
Normal file
105
src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue