42 lines
1.4 KiB
PHP
42 lines
1.4 KiB
PHP
<?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)
|
|
);
|
|
});
|
|
}
|
|
}
|
|
}
|