api code global jain

This commit is contained in:
Abhishek Mali
2025-11-05 10:37:10 +05:30
commit 52fe7e2bec
2834 changed files with 1784903 additions and 0 deletions

View File

@@ -0,0 +1,374 @@
<?php
namespace App\Repositories\Api\Access\Message;
use App\Constant\Constant;
use App\Models\User;
use App\Models\Messages;
use App\Models\MessagesThreads;
use App\Models\UserDeviceToken;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Traits\PushNotificationTraits;
use Illuminate\Support\Facades\Request;
use App\Repositories\Api\Access\Message\MessageInterface;
use Carbon\Carbon;
class MessageRepository implements MessageInterface
{
use PushNotificationTraits;
/**
* @param $request
* @return array
*/
public function sendMessage($request)
{
$response = [];
try{
$user = loggedInUser();
if($user){
$messageThread = MessagesThreads::where([
['sender_id','=',$user->id],
['receiver_id','=',$request->receiver_id]
])->orWhere([
['sender_id','=',$request->receiver_id],
['receiver_id','=',$user->id]
])->first();
if(!$messageThread) {
$messageThread = new MessagesThreads();
$messageThread->sender_id = $user->id;
$messageThread->receiver_id = $request->receiver_id;
$messageThread->created_at = Carbon::now();
$messageThread->updated_at = Carbon::now();
$messageThread->save();
}
$message = new Messages();
$message->message_thread_id = $messageThread->id;
$message->user_id = $user->id;
$message->message = $request->message;
$message->created_at = Carbon::now();
$message->updated_at = Carbon::now();
$message->save();
// For getting unread messages count
$userUnreadMessageCount = User::where('id', $request->receiver_id)->first();
$userUnreadMessageCount->increment('unread_message_count',1);
$data = [];
$tokens = UserDeviceToken::where('user_id',$request->receiver_id)->get()->toArray();
if($tokens && $tokens > 0) {
foreach ($tokens as $token) {
$data['notId'] = $message->id ?? 1;
$data['userToken'] = $token['token'] ?? '';
$data['title'] = $user->name ?? "New Message";
$data['body'] = $request->message;
$data['image'] = ($user->avatar) ? $user->avatar : url('/') . '/media/avatars/avatar0.jpg';
$extraData = [];
$extraData['id'] = $messageThread->id;
$extraData['avatar'] = ($user->avatar) ? $user->avatar : '';
$extraData['avatar_url'] = ($user->avatar) ? $user->avatar : url('/') . '/media/avatars/avatar0.jpg';
$extraData['user_id'] = $user->id;
$extraData['name'] = $user->name ?? '';
$extraData['unread_count'] = messagesCounter($request->receiver_id);
$extraData['message'] = $request->message;
$extraData['created_at'] = date('Y/m/d H:i:s');
$extraData['os'] = $token['os'] ? getPlatform($token['os']) : '';
$extraData['type'] = 'NewMessage';
$data['extraData'] = $extraData ?? [];
$this->pushNotification($data, $extraData);
}
}
if($message){
$response['status'] = 200;
$response['data'] = $data;
$response['message'] = trans('auth.message.sent');
}else{
$response['message'] = trans('auth.message.sent');
$response['status'] = 200;
}
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 403;
}
return $response;
}
/**
* @param $request
* @return array
*/
public function messageThreadList($request)
{
$response = [];
try {
$user = loggedInUser();
if ($user) {
// Make unread message count to 0
$userUnreadMessageCount = User::find($user->id);
if ($userUnreadMessageCount && $userUnreadMessageCount->unread_message_count != 0) {
$userUnreadMessageCount->unread_message_count = 0;
$userUnreadMessageCount->save();
}
$messageThreads = DB::table('message_threads as mt')
->leftJoin('users', function ($query) {
$query->whereRaw('(
CASE
WHEN mt.sender_id = ' . loggedInUser()->id . ' THEN mt.receiver_id = users.id
WHEN mt.receiver_id = ' . loggedInUser()->id . ' THEN mt.sender_id = users.id
END
)');
})
->leftJoin('messages as m', function ($query) {
$query->on('m.message_thread_id', '=', 'mt.id')
->where('m.created_at', '=', DB::raw("(select created_at from messages where message_thread_id = mt.id order by created_at DESC limit 1)"));
})
->select(
'mt.id',
'users.id as user_id',
'users.avatar',
'users.name',
DB::raw('REPLACE(m.created_at, "-","/") as created_at'),
'm.message',
DB::raw('(
SELECT COUNT(m.id)
FROM messages as m
WHERE m.user_id != ' . loggedInUser()->id . '
AND m.message_thread_id = mt.id
AND m.status = "0"
) AS unread_count')
);
if (isset($request->name) && !empty($request->name)) {
$messageThreads = $messageThreads->where('users.name', 'LIKE', "%{$request->name}%");
}
$messageThreads = $messageThreads->where(function ($q) {
return $q->where('receiver_id', loggedInUser()->id)
->orWhere('sender_id', loggedInUser()->id);
})
->groupBy('mt.id')
->orderBy('m.created_at', 'DESC')
->paginate($request->perPage ?? 20);
foreach ($messageThreads->items() as $key => $value) {
if($value->avatar) {
$value->avatar_url = getImage($value->avatar, Constant::USER_IMAGE_UPLOAD_PATH, '');
}
}
$response['data'] = $messageThreads;
$response['status'] = 200;
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 403;
}
return $response;
}
/**
* @param $request
* @return array
*/
public function messageList($request)
{
$response = [];
try{
$user = loggedInUser();
if($user){
if (isset($request->id)) {
$messageThread = MessagesThreads::where([
'id' => $request->id
])->first();
} else if (isset($request->user_id)) {
$messageThread = MessagesThreads::where([
['sender_id','=',$user->id],
['receiver_id','=',$request->user_id]
])->orWhere([
['sender_id','=',$request->user_id],
['receiver_id','=',$user->id]
])->first();
}
if($messageThread) {
$messages = Messages::where('message_thread_id', '=', $messageThread->id)
->select('user_id', 'message','created_at')
->latest()
->paginate($request->perPage ?? 20);
messageNotificationStatusUpdate($user->id,$messageThread->id);
} else {
$messages = [];
}
$response['data'] = $messages;
$response['status'] = 200;
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 403;
}
return $response;
}
/**
* @param $data
* @param $id
* @return array
*/
public function searchMessage($data,$id)
{
$response = [];
try{
$user = loggedInUser();
if($user){
$messageThread = MessagesThreads::where([
['sender_id','=',$user->id],
['receiver_id','=',$id]
])->orWhere([
['sender_id','=',$id],
['receiver_id','=',$user->id]
])->first();
if($messageThread) {
$messages = Messages::where('message_thread_id', '=', $messageThread->id)
->select('user_id', 'message', 'created_at');
}
if(!empty($data['message'])){
$messages = $messages->where('message','like','%'.$data['message'].'%');
}
$searchMessage = $messages->get();
$response['status'] = 200;
$response['message'] = $searchMessage;
}else{
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 401;
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 401;
}
return $response;
}
/**
* @param $messageThreadId
* @return array
*/
public function clearMessageConversation($messageThreadId)
{
$response = [];
$user = User::where('id', $messageThreadId)->first();
try{
$messageThread = MessagesThreads::where([
['sender_id','=',loggedInUser()->id],
['receiver_id','=',$messageThreadId]
])->orWhere([
['sender_id','=',$messageThreadId],
['receiver_id','=',loggedInUser()->id]
])->first();
if($messageThread) {
$deleteMessageThread = Messages::where('message_thread_id', '=', $messageThread->id)
->select('user_id', 'message', 'created_at')
->delete();
}
if($deleteMessageThread){
$response['message'] = trans('auth.message.clear',['username' => $user->name]);
$response['status'] = 200;
}else{
$response['message'] = trans('auth.no_record_found');
$response['status'] = 404;
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 401;
}
return $response;
}
/**
* @param $messageThreadId
* @return array
*/
public function deleteMessageThread($messageThreadId)
{
$response = [];
try{
$user = loggedInUser();
$userName = User::where('id', $messageThreadId)->first();
if($user){
$messageThread = MessagesThreads::where([
['sender_id','=',$user->id],
['receiver_id','=',$messageThreadId]
])->orWhere([
['sender_id','=',$messageThreadId],
['receiver_id','=',$user->id]
])->first();
if($messageThread){
$deleteMessage = Messages::where('message_thread_id','=', $messageThread->id)
->select('user_id', 'message', 'created_at')
->delete();
$messageThread = MessagesThreads::where('id','=', $messageThread->id)
->select('sender_id', 'receiver_id', 'created_at')
->delete();
if($messageThread){
$response['message'] = trans('auth.message.delete',['username' => $userName->name]);
$response['status'] = 200;
}else{
$response['message'] = trans('auth.no_record_found');
$response['status'] = 404;
}
}else{
$response['message'] = trans('auth.no_record_found');
$response['status'] = 404;
}
}
} catch (\Exception $ex) {
Log::error($ex);
$response['message'] = trans('auth.something_went_wrong');
$response['status'] = 401;
}
return $response;
}
}