user = $user; $this->request = $request; $this->userDeviceToken = $userDeviceToken; } /** * @return array */ public function sendFriendRequest(array $data) { $response = []; $user = []; try { $loggedInUser = loggedInUser(); $user = $this->user->query()->find($loggedInUser->id); $receiver = $this->user->where('id', $data['receiver_id'])->first(); //Check if request is exist $requestExist = $this->request->query()->where([ 'receiver_id' => $data['receiver_id'] ])->where([ 'sender_id' => $loggedInUser->id, ])->where('status', '!=', Constant::STATUS_TWO)->first(); if (!empty($loggedInUser)) { if ($data['receiver_id'] == $loggedInUser->id || $requestExist) { $response['message'] = trans('auth.request.request_already_sent'); $response['status'] = Constant::CODE_403; } else { $receiverId = (array) $data['receiver_id']; $pivotData = array_fill(Constant::STATUS_ZERO, count($receiverId), ['status' => Constant::STATUS_ZERO]); $syncData = array_combine($receiverId, $pivotData); $user->friendRequests()->attach($syncData); // Delete previous friend request $friendRequestExist = Notifications::whereIn('user_id', [$receiver->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $loggedInUser->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } //Push Notification dispatch(new SendFriendRequest($loggedInUser, $receiver)); $response['message'] = trans('auth.request.friend_request_success'); $response['status'] = Constant::CODE_200; } } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_403; } return $response; } /** * @return array */ public function acceptFriendRequest(array $data) { $response = []; try { $loggedInUser = loggedInUser(); $receiver = $this->user->where('id', $data['receiver_id'])->first(); //Check if request is exist $requestExist = $this->request->query()->where([ 'receiver_id' => $loggedInUser->id, 'sender_id' => $data['receiver_id'], ])->first(); $senderId = $this->request->query()->where([ 'receiver_id' => $data['receiver_id'], 'sender_id' => $loggedInUser->id ])->first(); if (!empty($loggedInUser)) { if (!empty($requestExist) || !empty($senderId)) { if ($requestExist && $data['status'] != Constant::STATUS_TWO) { $requestExist->status = $data['status']; $requestExist->save(); //Delete previous notification $friendRequestExist = Notifications::whereIn('user_id', [$loggedInUser->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $receiver->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } //Push Notification dispatch(new SendAcceptFriendRequest($loggedInUser, $receiver)); $response['status'] = Constant::CODE_200; $response['message'] = trans('auth.request.friend_request_accept'); } if ($senderId && $data['status'] != Constant::STATUS_TWO) { $senderId->status = $data['status']; $senderId->save(); //Delete previous notification $friendRequestExist = Notifications::whereIn('user_id', [$receiver->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $loggedInUser->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } //Push Notification dispatch(new SendAcceptFriendRequest($loggedInUser, $receiver)); $response['status'] = Constant::CODE_200; $response['message'] = trans('auth.request.friend_request_accept'); } //Delete requests if declined if (isset($data['status']) && $data['status'] == Constant::STATUS_TWO && $requestExist && $senderId) { $friendRequestExist = Notifications::whereIn('user_id', [$receiver->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $loggedInUser->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } // Delete notification when user revert friend request $revertFriendRequestExist = Notifications::whereIn('user_id', [$loggedInUser->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $receiver->id); if ($revertFriendRequestExist->first()) { $revertFriendRequestExist->delete(); } $requestExist->delete(); $senderId->delete(); $response['status'] = Constant::CODE_200; $response['message'] = trans('auth.request.friend_request_decline'); } else if (isset($data['status']) && $data['status'] == Constant::STATUS_TWO && $requestExist) { $friendRequestExist = Notifications::whereIn('user_id', [$receiver->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $loggedInUser->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } // Delete notification when user revert friend request $revertFriendRequestExist = Notifications::whereIn('user_id', [$loggedInUser->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $receiver->id); if ($revertFriendRequestExist->first()) { $revertFriendRequestExist->delete(); } $requestExist->delete(); $response['status'] = Constant::CODE_200; $response['message'] = trans('auth.request.friend_request_decline'); } else if (isset($data['status']) && $data['status'] == Constant::STATUS_TWO && $senderId) { $friendRequestExist = Notifications::whereIn('user_id', [$receiver->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $loggedInUser->id); if ($friendRequestExist->first()) { $friendRequestExist->delete(); } // Delete notification when user revert friend request $revertFriendRequestExist = Notifications::whereIn('user_id', [$loggedInUser->id]) ->where('type', 'FriendRequest') ->whereJsonContains('extra_fields->from_id', $receiver->id); if ($revertFriendRequestExist->first()) { $revertFriendRequestExist->delete(); } $senderId->delete(); $response['status'] = Constant::CODE_200; $response['message'] = trans('auth.request.friend_request_decline'); } } else { $response['message'] = trans('auth.request.request_not_found'); $response['status'] = Constant::CODE_403; } } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function listFriendRequest() { $response = []; try { $loggedInUser = loggedInUser(); if (!empty($loggedInUser)) { $requests = $this->request->with('receivedUsers')->where([ 'receiver_id' => $loggedInUser->id, 'status' => Constant::STATUS_ZERO ])->get()->toArray(); $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function myListFriendRequest(array $data) { $response = []; try { $loggedInUser = loggedInUser(); if (!empty($loggedInUser)) { $requests = $this->request->with('receivedUsers')->where([ 'receiver_id' => $loggedInUser->id, 'status' => Constant::STATUS_ZERO ])->latest()->paginate($data['limit'] ?? 10, ['*'], 'page', $data['page'] ?? 1); unreadFriendRequestCounter($loggedInUser->id, Constant::STATUS_ZERO); //Set shravak pending req badge to default state $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function sentRequestList() { $response = []; try { $loggedInUser = loggedInUser(); if (!empty($loggedInUser)) { $requests = $this->request->with('sentUsers')->where([ 'sender_id' => $loggedInUser->id, 'status' => Constant::STATUS_ZERO ])->latest()->get()->toArray(); $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function mySentRequestList(array $data) { $response = []; try { $loggedInUser = loggedInUser(); if (!empty($loggedInUser)) { $requests = $this->request->with('sentUsers')->where([ 'sender_id' => $loggedInUser->id, 'status' => Constant::STATUS_ZERO ])->latest()->paginate($data['limit'] ?? 10, ['*'], 'page', $data['page'] ?? 1); $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function friendList($data) { $response = []; $alreadyTaggedId = []; try { $loggedInUser = loggedInUser(); $sentRequests = $loggedInUser->friendRequests(); $receivedRequests = $loggedInUser->myFriendRequests(); if (!empty($loggedInUser)) { //If already tagged user if (isset($data['already_tagged']) && !empty($data['already_tagged'])) { $alreadyTaggedId = $data['already_tagged']; if (isset($data['name']) && !empty($data['name'])) { $sentRequests = $sentRequests->where('name', 'LIKE', "%{$data['name']}%"); } $sentRequests = $sentRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->whereNotIn('users.id', $alreadyTaggedId) ->get(); if (isset($data['name']) && !empty($data['name'])) { $receivedRequests = $receivedRequests->where('name', 'LIKE', "%{$data['name']}%"); } $receivedRequests = $receivedRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->whereNotIn('users.id', $alreadyTaggedId) ->get(); } else { if (isset($data['name']) && !empty($data['name'])) { $sentRequests = $sentRequests->where('name', 'LIKE', "%{$data['name']}%"); } $sentRequests = $sentRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); if (isset($data['name']) && !empty($data['name'])) { $receivedRequests = $receivedRequests->where('name', 'LIKE', "%{$data['name']}%"); } $receivedRequests = $receivedRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); } $requests = $sentRequests->merge($receivedRequests); $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function myFriendList($data) { $response = []; $alreadyTaggedId = []; try { $loggedInUser = loggedInUser(); $sentRequests = $loggedInUser->friendRequests(); $receivedRequests = $loggedInUser->myFriendRequests(); if (!empty($loggedInUser)) { //If already tagged user if (isset($data['already_tagged']) && !empty($data['already_tagged'])) { $alreadyTaggedId = $data['already_tagged']; if (isset($data['name']) && !empty($data['name'])) { $sentRequests = $sentRequests->where('name', 'LIKE', "%{$data['name']}%"); } $sentRequests = $sentRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->whereNotIn('users.id', $alreadyTaggedId) ->get(); if (isset($data['name']) && !empty($data['name'])) { $receivedRequests = $receivedRequests->where('name', 'LIKE', "%{$data['name']}%"); } $receivedRequests = $receivedRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->whereNotIn('users.id', $alreadyTaggedId) ->get(); } else { if (isset($data['name']) && !empty($data['name'])) { $sentRequests = $sentRequests->where('name', 'LIKE', "%{$data['name']}%"); } $sentRequests = $sentRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); if (isset($data['name']) && !empty($data['name'])) { $receivedRequests = $receivedRequests->where('name', 'LIKE', "%{$data['name']}%"); } $receivedRequests = $receivedRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); } $requests = $sentRequests->merge($receivedRequests); $response['data'] = $this->paginate($requests, $data['limit'] ?? 10, $data['page'] ?? Constant::STATUS_ONE, request()); // $response['data'] = new Paginator($requests, $data['limit'] ?? Constant::PAGINATE_LIMIT); unreadShravakMenuCounter($loggedInUser->id, Constant::STATUS_ZERO); //Set shravak menu badge to default state $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * @return array */ public function userFriendList($data, $user) { $response = []; $alreadyTaggedId = []; try { $loggedInUser = loggedInUser(); $sentRequests = $user->friendRequests(); $receivedRequests = $user->myFriendRequests(); if (!empty($loggedInUser)) { if (isset($data['name']) && !empty($data['name'])) { $sentRequests = $sentRequests->where('name', 'LIKE', "%{$data['name']}%"); } $sentRequests = $sentRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); if (isset($data['name']) && !empty($data['name'])) { $receivedRequests = $receivedRequests->where('name', 'LIKE', "%{$data['name']}%"); } $receivedRequests = $receivedRequests->with('userDetail') ->select('users.id', 'users.name', 'users.avatar') ->where('requests.status', Constant::STATUS_ONE) ->get(); $requests = $sentRequests->merge($receivedRequests); $requests = $this->paginate($requests, $data['limit'] ?? 10, $data['page'] ?? Constant::STATUS_ONE, $data); $response['data'] = $requests; $response['status'] = Constant::CODE_200; } else { $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('auth.something_went_wrong'); $response['status'] = Constant::CODE_401; } return $response; } /** * The attributes that are mass assignable. * * @var array */ public function paginate($items, $perPage = Constant::PAGINATE_LIMIT, $page = null, $request) { $page = $page ?: (Paginator::resolveCurrentPage() ?: Constant::STATUS_ONE); $items = $items instanceof Collection ? $items : Collection::make($items); // return new LengthAwarePaginator(array_slice(array_values($items), $offset, $perPage, true), count($items), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]); return new LengthAwarePaginator($items->forPage($page, $perPage)->values(), $items->count(), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()]); } /** * @return array */ public function friendSuggestion($data) { $response = [ 'status' => Constant::CODE_403, 'error' => trans('api.something_went_wrong'), 'success' => Constant::STATUS_FALSE ]; try { $user = loggedInUser(); $myFriendsList = DB::table('requests') // ->select(GROUP_CONCAT(CONCAT(sender_id,',',receiver_id))) ->select(DB::raw("group_concat(CONCAT(sender_id,',',receiver_id)) as myfriend")) ->where('status', Constant::STATUS_ONE) ->where(function ($query) { $query->where('sender_id', loggedInUser()->id) ->orWhere('receiver_id', loggedInUser()->id); }) ->first(); $senderRequest = Request::select('receiver_id as user_id')->where(function ($query) { $query->where('sender_id', loggedInUser()->id); }); $reciveRequest = Request::select('sender_id as user_id')->where(function ($query) { $query->where('receiver_id', loggedInUser()->id); })->union($senderRequest); $myFriendListIds = $reciveRequest->pluck('user_id')->toArray(); // get users $friendSuggestion = DB::select("select DISTINCT users.id from (SELECT receiver_id as user_id FROM requests WHERE sender_id IN (".$myFriendsList->myfriend.") AND sender_id != 1 AND receiver_id != 1 AND status = 1 union all SELECT sender_id as user_id FROM requests WHERE receiver_id IN (".$myFriendsList->myfriend.") AND sender_id != 1 AND receiver_id != 1 AND status = 1 ) a join users on users.id = a.user_id where users.id NOT IN (".implode(',', $myFriendListIds).") "); $collection = collect($friendSuggestion)->pluck('id')->toArray(); $friendSuggestion = User::whereIn('id', $collection)->where('id', '!=', loggedInUser()->id); $response['data'] = $friendSuggestion->paginate($data['limit'] ?? 10, ['*'], 'page', $data['page'] ?? 1); // $response['data'] = $this->paginate($friendSuggestion, $data['limit'] ?? 10, $data['page'] ?? Constant::STATUS_ONE, request()); $response['status'] = Constant::CODE_200; $response['success'] = Constant::STATUS_TRUE; $response['message'] = trans('api.sant.unfollow'); unset($response['error']); } catch (\Exception $ex) { Log::error($ex); $response['message'] = trans('api.something_went_wrong'); $response['status'] = Constant::CODE_403; } return $response; } }