dishplanner/src/DishPlanner/Schedule/Services/ScheduleGenerator.php

43 lines
1.4 KiB
PHP
Raw Normal View History

2025-10-13 14:57:11 +02:00
<?php
namespace DishPlanner\Schedule\Services;
use App\Models\Planner;
use App\Models\User;
use Carbon\CarbonPeriod;
use DishPlanner\Auth\Exceptions\InvalidPlannerException;
use DishPlanner\Schedule\Repositories\ScheduleRepository;
use DishPlanner\ScheduledUserDish\Actions\CreateScheduledUserDishAction;
use DishPlanner\UserDish\Repositories\UserDishRepository;
use Illuminate\Support\Carbon;
class ScheduleGenerator
{
/**
* @throws InvalidPlannerException
*/
public function generate(Planner $planner): void
{
$users = User::all();
$period = CarbonPeriod::create(Carbon::now(), Carbon::now()->startOfDay()->addWeeks(2));
/** @var ScheduleRepository $scheduleRepository */
$scheduleRepository = resolve(ScheduleRepository::class);
/** @var UserDishRepository $userDishRepository */
$userDishRepository = resolve(UserDishRepository::class);
foreach ($period as $date) {
$users->each(function (User $user) use ($date, $planner, $scheduleRepository, $userDishRepository) {
$schedule = $scheduleRepository->findOrCreate($planner, $date);
(new CreateScheduledUserDishAction())->execute(
planner: $planner,
schedule: $schedule,
userDish: $userDishRepository->getRandomForDate($user, $date)
);
});
}
}
}