48 lines
1.6 KiB
PHP
48 lines
1.6 KiB
PHP
<?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(),
|
|
);
|
|
}
|
|
}
|