api code global jain
This commit is contained in:
665
app/Repositories/Api/Access/Request/RequestRepository.php
Normal file
665
app/Repositories/Api/Access/Request/RequestRepository.php
Normal file
@@ -0,0 +1,665 @@
|
||||
<?php
|
||||
namespace App\Repositories\Api\Access\Request;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Request;
|
||||
use App\Constant\Constant;
|
||||
use App\Jobs\Notifications\Shravak\SendAcceptFriendRequest;
|
||||
use App\Jobs\Notifications\Shravak\SendFriendRequest;
|
||||
use App\Models\UserDeviceToken;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use App\Traits\PushNotificationTraits;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Pagination\Paginator;
|
||||
use Illuminate\Support\Collection;
|
||||
use App\Models\Notifications;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RequestRepository implements RequestInterface
|
||||
{
|
||||
use PushNotificationTraits;
|
||||
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* @var Request
|
||||
*/
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* @var UserDeviceToken
|
||||
*/
|
||||
protected $userDeviceToken;
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @param UserDeviceToken $userDeviceToken
|
||||
* RequestRepository constructor.
|
||||
*
|
||||
*/
|
||||
public function __construct(User $user, Request $request, UserDeviceToken $userDeviceToken)
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user