API Chat
This commit is contained in:
196
Modules/Linksehat/Http/Controllers/Api/ChatController.php
Normal file
196
Modules/Linksehat/Http/Controllers/Api/ChatController.php
Normal file
@@ -0,0 +1,196 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Channel;
|
||||
use App\Models\UserChannel;
|
||||
use App\Models\Message;
|
||||
use App\Models\File;
|
||||
use App\Models\Person;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Pusher\Pusher;
|
||||
|
||||
class ChatController extends Controller
|
||||
{
|
||||
public function createChannel(Request $request){
|
||||
// Validasi data yang diterima dari request
|
||||
$validatedData = $request->validate([
|
||||
'member_id' => 'required',
|
||||
'doctor_id' => 'required',
|
||||
], [
|
||||
'member_id.required' => 'Member ID harus diisi.',
|
||||
'doctor_id.required' => 'Doctor ID harus diisi.',
|
||||
]);
|
||||
|
||||
// Buat dan simpan data channel ke dalam tabel
|
||||
$channel = Channel::updateOrCreate([
|
||||
'name' => $request->member_id .'_' . $request->doctor_id,
|
||||
],
|
||||
[
|
||||
'name' => $request->member_id .'_' . $request->doctor_id,
|
||||
'type' => $request->type,
|
||||
'member_id' => $request->member_id,
|
||||
'doctor_id' => $request->doctor_id,
|
||||
// Jika ada kolom tambahan, tambahkan di sini
|
||||
]);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk member_id
|
||||
$userChannelMember = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $request->member_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $request->member_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk doctor_id
|
||||
$userChannelDoctor = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $request->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $request->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Berikan respons yang sesuai ke klien
|
||||
return response()->json(['message' => 'Channel created successfully', 'channel' => $channel]);
|
||||
}
|
||||
|
||||
public function listChannel(Request $request){
|
||||
// Validasi request jika diperlukan
|
||||
$channel = Channel::where('member_id',$request->user_id)->get()->toArray();
|
||||
|
||||
if (!$channel) {
|
||||
$dataChannel = Channel::where('doctor_id',$request->user_id)->get()->toArray();
|
||||
if ($dataChannel){
|
||||
$data = [];
|
||||
foreach($dataChannel as $d){
|
||||
$user = User::with('detail')->where('nID', $d['member_id'])->first();
|
||||
$lastMessage = Message::where('channel_id', $d['id'])
|
||||
->latest('created_at')
|
||||
->first();
|
||||
$urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $user->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
$arr['id'] = $d['id'];
|
||||
$arr['avatar'] = $avatarMember;
|
||||
$arr['name'] = $user->sFirstName .' '.$user->sLastName;
|
||||
$arr['last_message'] = $lastMessage;
|
||||
|
||||
array_push($data, $arr);
|
||||
}
|
||||
}
|
||||
$channel = $data;
|
||||
}
|
||||
|
||||
|
||||
return response()->json(['message' => 'Get List Channel successfully', 'channel' => $channel]);
|
||||
}
|
||||
|
||||
public function sendMessage(Request $request)
|
||||
{
|
||||
// Validasi request jika diperlukan
|
||||
$validatedData = $request->validate([
|
||||
'user_id' => 'required'
|
||||
]);
|
||||
|
||||
// Ambil data dari request
|
||||
$message = Message::create([
|
||||
'content' => $request->message,
|
||||
'from_user' => $request->user_id,
|
||||
'channel_id' => $request->channel_id,
|
||||
'type' => $request->message ? 'text' : 'file'
|
||||
]);
|
||||
|
||||
$pathFile = null;
|
||||
if ($request->hasFile('file_chat')) {
|
||||
foreach ($request->file_chat as $file) {
|
||||
$pathFile = File::storeFile('chat', $message->id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\Message',
|
||||
'fileable_id' => $message->id,
|
||||
'type' => 'chat',
|
||||
'name' => File::getFileName('chat', $message->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
|
||||
$message->update([
|
||||
'content' => env('LMS_APP_STORAGE') . 'storage/' . $pathFile,
|
||||
'from_user' => $request->user_id,
|
||||
'channel_id' => $request->channel_id,
|
||||
'type' => 'file',
|
||||
]);
|
||||
}
|
||||
|
||||
$data = Message::where('channel_id', $request->channel_id)->get()->toArray();
|
||||
// Berikan respons yang sesuai ke klien
|
||||
|
||||
$channel = Channel::where('id',$request->channel_id)->first();
|
||||
if($channel->member_id == $request->user_id){
|
||||
// Get nama dokter
|
||||
$person = Person::where('id', $channel->doctor_id)->first();
|
||||
$name = $person->name;
|
||||
} else {
|
||||
// Get nama pasien
|
||||
$person = User::where('nID', $channel->member_id)->first();
|
||||
$name = $person->sFirstName . ' ' . $person->sLastName;
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Message sent successfully',
|
||||
'data' => [
|
||||
'header' => $name,
|
||||
'chat' => $data
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function getMessage(Request $request)
|
||||
{
|
||||
// Buat instance Pusher dengan konfigurasi yang sesuai
|
||||
$pusher = new Pusher(
|
||||
env('PUSHER_APP_KEY'),
|
||||
env('PUSHER_APP_SECRET'),
|
||||
env('PUSHER_APP_ID'),
|
||||
[
|
||||
'cluster' => env('PUSHER_APP_CLUSTER'),
|
||||
'useTLS' => true,
|
||||
]
|
||||
);
|
||||
$channel = Channel::where('id',$request->channel_id)->first();
|
||||
if($channel->member_id == $request->user_id){
|
||||
// Get nama dokter
|
||||
$person = Person::where('id', $channel->doctor_id)->first();
|
||||
$name = $person->name;
|
||||
} else {
|
||||
// Get nama pasien
|
||||
$person = User::where('nID', $channel->member_id)->first();
|
||||
$name = $person->sFirstName . ' ' . $person->sLastName;
|
||||
}
|
||||
|
||||
$data = Message::where('channel_id', $request->channel_id)->get()->toArray();
|
||||
// Berikan respons yang sesuai ke klien
|
||||
return response()->json([
|
||||
'message' => 'Message sent successfully',
|
||||
'data' => [
|
||||
'header' => $name,
|
||||
'chat' => $data
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user