dishplanner/src/DishPlanner/Schedule/Actions/RegenerateScheduleDayForUserAction.php

49 lines
1.6 KiB
PHP
Raw Normal View History

2025-10-13 14:57:11 +02:00
<?php
namespace DishPlanner\Schedule\Actions;
use App\Models\Planner;
use App\Models\Schedule;
use App\Models\ScheduledUserDish;
use App\Models\User;
use DishPlanner\ScheduledUserDish\Actions\CreateScheduledUserDishAction;
use DishPlanner\ScheduledUserDish\Repositories\ScheduledUserDishRepository;
use DishPlanner\UserDish\Repositories\UserDishRepository;
class RegenerateScheduleDayForUserAction
{
public function execute(Planner $planner, Schedule $schedule, User $user, bool $overwrite = false): ScheduledUserDish
{
$scheduledUserDish = resolve(ScheduledUserDishRepository::class)->findForScheduleAndUser($schedule, $user);
$fixedUserDish = resolve(UserDishRepository::class)->findForUserByFixedRecurrenceOnDay($user, $schedule->date->dayOfWeek);
/** @var CreateScheduledUserDishAction $createAction */
$createAction = resolve(CreateScheduledUserDishAction::class);
if (is_null($scheduledUserDish)) {
return $createAction->execute(
planner: $planner,
schedule: $schedule,
userDish: $fixedUserDish ?? $user->userDishes->random(),
);
}
if (!$overwrite && $scheduledUserDish->userDish) {
return $scheduledUserDish;
}
if ($fixedUserDish && $scheduledUserDish->user_dish_id === $fixedUserDish->id) {
return $scheduledUserDish;
}
$scheduledUserDish->delete();
return $createAction->execute(
planner: $planner,
schedule: $schedule,
userDish: $fixedUserDish ?? $user->userDishes->random(),
);
}
}