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(); $data = []; if ($dataChannel){ 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; } ChatMessageSent::dispatch($message); 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 ] ]); } }