app/src/DishPlanner/Schedule/Actions/RegenerateScheduleForDateForUsersAction.php

46 lines
1.4 KiB
PHP
Raw Normal View History

<?php
namespace DishPlanner\Schedule\Actions;
use App\Models\Planner;
use App\Models\Schedule;
use App\Models\ScheduledUserDish;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class RegenerateScheduleForDateForUsersAction
{
public function execute(Planner $planner, Carbon $date, array $userIds): void
{
DB::transaction(function () use ($planner, $date, $userIds) {
$schedule = Schedule::firstOrCreate(
['planner_id' => $planner->id, 'date' => $date->format('Y-m-d')],
['is_skipped' => false]
);
ScheduledUserDish::where('schedule_id', $schedule->id)
->whereIn('user_id', $userIds)
->delete();
$users = User::with('userDishes.dish')
->whereIn('id', $userIds)
->where('planner_id', $planner->id)
->get();
foreach ($users as $user) {
if ($user->userDishes->isNotEmpty()) {
$randomUserDish = $user->userDishes->random();
ScheduledUserDish::create([
'schedule_id' => $schedule->id,
'user_id' => $user->id,
'user_dish_id' => $randomUserDish->id,
'is_skipped' => false,
]);
}
}
});
}
}