diff --git a/app/Http/Middleware/DemoMiddleware.php b/app/Http/Middleware/DemoMiddleware.php index 1c115ee..62bea02 100644 --- a/app/Http/Middleware/DemoMiddleware.php +++ b/app/Http/Middleware/DemoMiddleware.php @@ -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,11 +24,17 @@ public function handle(Request $request, Closure $next): Response return $next($request); } - $planner = Planner::create([ - 'name' => 'Demo User', - 'email' => 'demo-' . Str::uuid() . '@demo.local', - 'password' => Hash::make(Str::random(32)), - ]); + $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); diff --git a/src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php b/src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php new file mode 100644 index 0000000..9ed134e --- /dev/null +++ b/src/DishPlanner/Planner/Actions/SeedDemoPlannerAction.php @@ -0,0 +1,105 @@ +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); + } +}