private function markAsRead($chat, $user) { $deliverState = false; foreach ($chat->getMembersTokens(true) as $token) { MessageUnread::whereRaw('chat_id = ' . $chat->id)->get()->each(function ($unread) use($chat, $user, $deliverState) { if ($unread->user_id == $user->id) { $unread->delete(); Message::where('chat_id', $chat->id)->whereNull('delivered_at')->get()->map(function ($message) use($chat, $user, $deliverState) { if (!$message->delivered_at) { $message->delivered_at = Carbon::now(); } if (!$message->viewed_at) { $message->viewed_at = Carbon::now(); } $message->save(); }); } }); $state = new StateSender($token); if ($deliverState) { $state->setChatAsDelivered($chat->id, $user->id); } $state->setChatAsRead($chat->id, $user->id); $state->send(); } $this->updateCounts($chat); return $this; }