Files
cssd-back/app/Http/Controllers/MessageController.php
T
2025-05-25 14:43:24 +03:30

130 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreMessageRequest;
use App\Models\Message;
use App\Models\User;
use Illuminate\Http\Request;
use Packages\Messaging\src\Facades\MessageResponse;
class MessageController extends Controller
{
public function index(Request $request)
{
$User = auth('api')->user();
$medical_center_id = null;
if ($User->hasRole('Supervisor') || $User->hasRole('User')) {
$medical_center_id = $User->medical_center_id;
}
$Users = User::where(function ($query) use ($User) {
$query->whereHas('messagesSent', function ($q) use ($User) {
$q->where('recipient_user_id', $User->id);
})
->orWhereHas('messagesReceived', function ($q) use ($User) {
$q->where('sender_user_id', $User->id);
});
})
->when($medical_center_id, function ($query) use ($medical_center_id) {
$query->where('medical_center_id', $medical_center_id);
})
->paginate(10);
foreach ($Users as $user) {
$user->unread_messages_count = Message::where('sender_user_id', $user->id)
->where('recipient_user_id', $User->id)
->where('status', 'UnRead')
->count();
$user->messages_count = Message::where(function ($query) use ($user, $User) {
$query->where('sender_user_id', $user->id)
->where('recipient_user_id', $User->id);
})->orWhere(function ($query) use ($user, $User) {
$query->where('sender_user_id', $User->id)
->where('recipient_user_id', $user->id);
})->count();
}
return response()->json($Users);
}
public function create()
{
}
public function show($UserID)
{
// if (!auth('api')->user()->can('show', $Message)) {
// return MessageResponse::error(trans('messages.access_denied'));
// }
$User = User::findOrFail($UserID);
// $SendMessages = Message::where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID)->get();
$ReceivedMessages = Message::where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id)->get();
$Messages = Message::where(function ($query) use ($UserID) {
$query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID);
})->orWhere(function ($query) use ($UserID) {
$query->where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id);
})->get();
foreach ($ReceivedMessages as $ReceivedMessage) {
$ReceivedMessage->status = 'Read';
$ReceivedMessage->save();
}
return MessageResponse::data($Messages);
}
public function store(StoreMessageRequest $request)
{
$MessageData = [
// 'title' => $request->title,
'text' => $request->message,
'sender_user_id' => auth('api')->user()->id,
'recipient_user_id' => $request->user_id,
'status' => 'UnRead',
];
Message::create($MessageData);
return MessageResponse::success(trans('messages.success'));
}
public function edit(Message $Message)
{
// return MessageResponse::data($Message);
}
public function update(StoreMessageRequest $request, Message $Message)
{
// $Message->update($request->all());
// return MessageResponse::success(trans('messages.success'));
}
public function destroy(Message $Message)
{
if (auth('api')->user()->cant('delete', $Message)) {
return MessageResponse::error(trans('messages.access_denied'));
}
$Message->delete();
return MessageResponse::success(trans('messages.success'));
}
public function destroyUserMessages(User $User)
{
// if (auth('api')->user()->cant('deleteUserMessage', Message::class)) {
// return MessageResponse::error(trans('messages.access_denied'));
// }
Message::where(function ($query) use ($User) {
$query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $User->id);
})->orWhere(function ($query) use ($User) {
$query->where('sender_user_id', $User->id)->where('recipient_user_id', auth('api')->user()->id);
})->get()->each->delete();
return MessageResponse::success(trans('messages.success'));
}
}