release/v0.7 #42

Merged
myrmidex merged 12 commits from release/v0.7 into main 2026-08-17 00:56:00 +02:00
2 changed files with 118 additions and 5 deletions
Showing only changes of commit f78d97dae5 - Show all commits

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,12 +24,18 @@ public function handle(Request $request, Closure $next): Response
return $next($request); return $next($request);
} }
$planner = DB::transaction(function () {
$planner = Planner::create([ $planner = Planner::create([
'name' => 'Demo User', 'name' => 'Demo User',
'email' => 'demo-' . Str::uuid() . '@demo.local', 'email' => 'demo-' . Str::uuid() . '@demo.local',
'password' => Hash::make(Str::random(32)), 'password' => Hash::make(Str::random(32)),
]); ]);
resolve(SeedDemoPlannerAction::class)->execute($planner);
return $planner;
});
Auth::login($planner); Auth::login($planner);
return $next($request); return $next($request);

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);
}
}