with('user')->where('client_id', $clientId) ->orderBy("id", "desc")->paginate(10); $this->removeUnreadCount($clientId, $request->user_id, $request->user_crm_id); return response()->json([ "messages" => array_reverse($messages->items()), "more" => $request->page < $messages->lastPage(), ]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $clientChat = ClientChat::create([ 'client_id' => $request->client_id, 'user_id' => $request->user_id, 'user_crm_id' => $request->user_crm_id, 'message' => $request->message, 'created_at' => date("Y-m-d H:i:s") ]); $this->addUnreadCount($request->client_id, $request->user_id, $request->user_crm_id); return response()->json($clientChat); } private function addUnreadCount($client_id, $userId, $userCrmId) { if ($userId or $userCrmId) { $unreadMsg = UnreadClientChat::where('client_id', $client_id); if ($userId) { $unreadMsg = $unreadMsg->where(function($q) use ($userId){ $q->where('user_id', '<>', $userId) ->orWhere('user_id', null); }); } elseif ($userCrmId) { $unreadMsg = $unreadMsg->where(function($q) use ($userCrmId){ $q->where('user_crm_id', '<>', $userCrmId) ->orWhere('user_crm_id', null); }); } $unreadMsg->update([ 'count' => \DB::raw("count + 1") ]); } } private function removeUnreadCount($client_id, $userId, $userCrmId) { if ($userId or $userCrmId) { $unreadMsg = UnreadClientChat::query(); if ($userId) { $unreadMsg = UnreadClientChat::where([ ['client_id', $client_id], ['user_id', $userId] ]); } elseif ($userCrmId) { $unreadMsg = UnreadClientChat::where([ ['client_id', $client_id], ['user_crm_id', $userCrmId] ]); } if (!$unreadMsg->first()) { UnreadClientChat::create([ 'client_id' => $client_id, 'user_id' => $userId, 'user_crm_id' => $userCrmId, 'count' => 0 ]); } else { $unreadMsg->update([ 'count' => 0 ]); } } } public static function checkMessageCount($client_id, $userId, $userCrmId) { if ($userId or $userCrmId) { $unreadMsg = null; if ($userId) { $unreadMsg = UnreadClientChat::where([ ['client_id', $client_id], ['user_id', $userId] ])->first(); } elseif ($userCrmId) { $unreadMsg = UnreadClientChat::where([ ['client_id', $client_id], ['user_crm_id', $userCrmId] ])->first(); } if (!$unreadMsg) { return ClientChat::where('client_id', $client_id)->count(); } return $unreadMsg->count; } } }