{"repo": "9jadev/drnow-backend", "files": {"app/Http/Controllers/BookingConversationController.php": {"dfc7f1a85d84eb0f9df0fefc70df2e848d19a2c4": {"t": 1785745790.0574322, "n": 23614, "h": "3ffbb0a48fb10096", "c": "whereNot(\"role\", \"system\")->select([\"role\", \"content\", \"created_at\"])->where(\"created_at\", \">=\", now()->subHour())->get();\n if ($chats->count() == 0) {\n WhatsappConversation::create([\n \"role\" => \"system\",\n \"whatsapp_id\" => $whatsapp_id,\n \"content\" => << \"user\",\n \"whatsapp_id\" => $whatsapp_id,\n \"content\" => \"Patient Data: \" . $name\n ]);\n }\n\n $newcaht = WhatsappConversation::create([\n \"role\" => \"user\",\n \"whatsapp_id\" => $whatsapp_id,\n \"content\" => $message,\n ]);\n // logs()->info(\"Booking Conversation\", $chats->toArray());\n $chats = WhatsappConversation::where(\"whatsapp_id\", $whatsapp_id)->select([\"role\", \"content\"])->get();\n $response = Http::withHeaders([\n 'Authorization' => 'Bearer ' . env('DEEPSEEK_API_KEY'), // πŸ”‘ Put this in .env\n 'Content-Type' => 'application/json',\n ])->timeout(120)\n ->post('https://api.deepseek.com/v1/chat/completions', [\n \"model\" => \"deepseek-chat\",\n \"messages\" => $chats,\n // \"temperature\" => 1.5,\n \"stream\" => false\n ]);\n if ($response->successful()) {\n $newcahtai = WhatsappConversation::create([\n \"role\" => \"assistant\",\n \"content\" => $response->json()[\"choices\"][0][\"message\"][\"content\"],\n \"whatsapp_id\" => $whatsapp_id\n ]);\n // $chats = $this->getChats($booking->booking_id, false);\n $chats = $this->getChatsBookingWhatapp($newcahtai->whatsapp_id);\n }\n\n // $booking->update([\n // \"report_markdown\" => null\n // ]);\n\n // logs('response', $response->json()[\"choices\"][0][\"message\"][\"content\"]);\n\n $message = (new WhatsAppService())->sendTextMessage(\n $to,\n $response->json()[\"choices\"][0][\"message\"][\"content\"]\n );\n\n return response()->json([\"message\" => \"success\", \"chats\" => $chats, \"dd\" => $response->json()[\"choices\"][0][\"message\"]], 200);\n }\n\n protected function getChats($booking_id, $showwall = false)\n {\n if ($showwall == true) {\n $chats = BookingConversation::where(\"member_id\", auth(\"member\")->user()->member_id)->where(\"booking_id\", $booking_id)->whereNot(\"role\", \"system\")->get();\n return $chats;\n }\n $chats = BookingConversation::where(\"member_id\", auth(\"member\")->user()->member_id)->where(\"booking_id\", $booking_id)->whereNot(\"role\", \"system\")->select([\"role\", \"content\", \"created_at\"])->get();\n return $chats;\n }\n /**\n * Display a listing of the resource.\n */\n public function index()\n {\n //\n }\n\n /**\n * Show the form for creating a new resource.\n */\n public function create()\n {\n //\n }\n\n /**\n * Store a newly created resource in storage.\n */\n public function store(Request $request)\n {\n $request->validate([\n \"booking_id\" => \"required|string|exists:booking_payments,booking_id\",\n ]);\n $booking = Booking::where(\"member_id\", auth(\"member\")->user()->id)->where(\"booking_id\", $request->booking_id)->first();\n $now = Carbon::now();\n $user = Member::where(\"id\", auth(\"member\")->user()->id)->first();\n\n\n if ($user->hasActiveSubscription() == false) {\n return response()->json([\"message\" => \"No active subscription\"], 400);\n }\n\n if (!$now->between($booking->booking_start_time, $booking->booking_end_time)) {\n // The current time is within the booking range\n $booking->update([\n \"status\" => Booking::CLOSED\n ]);\n return response()->json([\"message\" => \"Booking time has not expired\"], 400);\n }\n\n $patient_data = json_decode($booking->member_data);\n $chats = BookingConversation::where(\"member_id\", auth(\"member\")->user()->member_id)->where(\"booking_id\", $request->booking_id)->whereNot(\"role\", \"system\")->select([\"role\", \"content\", \"created_at\"])->get();\n if ($chats->count() == 0) {\n BookingConversation::create([\n \"role\" => \"system\",\n \"booking_id\" => $booking->booking_id,\n \"member_id\" => auth(\"member\")->user()->member_id,\n \"content\" => << \"user\",\n \"booking_id\" => $booking->booking_id,\n \"member_id\" => auth(\"member\")->user()->member_id,\n \"content\" => \"Patient Data: \" . $patient_data->name . \" is a \" . $patient_data->sex . \" aged \" . $patient_data->age . \" years old. \",\n ]);\n }\n $request->validate([\n \"message\" => \"required|string\",\n ]);\n $message = $request->message;\n\n if ($request->filess != null) {\n $mess = \"\";\n foreach ($request->filess as $value) {\n $mess = $mess . \" \" . $this->ocr($value);\n }\n $message = $message . \" \" . $mess;\n }\n\n // return $message;\n\n\n\n $newcaht = BookingConversation::create([\n \"role\" => \"user\",\n \"booking_id\" => $booking->booking_id,\n \"member_id\" => auth(\"member\")->user()->member_id,\n \"content\" => $message,\n \"file_content\" => $request->message,\n \"files\" => json_encode($request->filess)\n ]);\n logs()->info(\"Booking Conversation\", $chats->toArray());\n $chats = BookingConversation::where(\"member_id\", auth(\"member\")->user()->member_id)->where(\"booking_id\", $request->booking_id)->select([\"role\", \"content\"])->get();\n $response = Http::withHeaders([\n 'Authorization' => 'Bearer ' . env('DEEPSEEK_API_KEY'), // πŸ”‘ Put this in .env\n 'Content-Type' => 'application/json',\n ])->timeout(120)\n ->post('https://api.deepseek.com/v1/chat/completions', [\n \"model\" => \"deepseek-chat\",\n \"messages\" => $chats,\n // \"temperature\" => 1.5,\n \"stream\" => false\n ]);\n if ($response->successful()) {\n $newcahtai = BookingConversation::create([\n \"role\" => \"assistant\",\n \"booking_id\" => $booking->booking_id,\n\n \"content\" => $response->json()[\"choices\"][0][\"message\"][\"content\"],\n \"member_id\" => auth(\"member\")->user()->member_id\n ]);\n // $chats = $this->getChats($booking->booking_id, false);\n $chats = $this->getChatsBooking($newcahtai->booking_id);\n }\n\n $booking->update([\n \"report_markdown\" => null\n ]);\n\n return response()->json([\"message\" => \"success\", \"chats\" => $chats, \"dd\" => $response->json()[\"choices\"][0][\"message\"]], 200);\n }\n\n protected function getChatsBookingWhatapp($whatsapp_id)\n {\n $chats = WhatsappConversation::where(\"whatsapp_id\", $whatsapp_id)->whereNot(\"role\", \"system\")->select([\"role\", \"content\", \"created_at\"])->get();\n return $chats;\n }\n\n protected function getChatsBooking($bookingid)\n {\n $chats = BookingConversation::where(\"member_id\", auth(\"member\")->user()->member_id)->whereNot(\"role\", \"system\")->where(\"booking_id\", $bookingid)->select([\"role\", \"content\", \"file_content\", \"created_at\", \"files\"])->get();\n return $chats;\n }\n\n public function ocr($url)\n {\n\n $curl = curl_init();\n curl_setopt_array($curl, array(\n CURLOPT_URL => 'https://api.ocr.space/parse/image',\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => '',\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 0,\n CURLOPT_FOLLOWLOCATION => true,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => 'POST',\n CURLOPT_POSTFIELDS => array('language' => 'eng', 'isOverlayRequired' => 'false', 'url' => $url, 'iscreatesearchablepdf' => 'false', 'issearchablepdfhidetextlayer' => 'false'),\n CURLOPT_HTTPHEADER => array(\n 'apikey: K87890322888957'\n ),\n ));\n\n $response = curl_exec($curl);\n\n curl_close($curl);\n return $response;\n }\n\n /**\n * Display the specified resource.\n */\n public function show(BookingConversation $bookingConversation)\n {\n //\n }\n\n /**\n * Show the form for editing the specified resource.\n */\n public function edit(BookingConversation $bookingConversation)\n {\n //\n }\n\n /**\n * Update the specified resource in storage.\n */\n public function update(Request $request, BookingConversation $bookingConversation)\n {\n //\n }\n\n /**\n * Remove the specified resource from storage.\n */\n public function destroy(BookingConversation $bookingConversation)\n {\n //\n }\n}\n"}}, "app/Http/Controllers/TelegramController.php": {"dfc7f1a85d84eb0f9df0fefc70df2e848d19a2c4": {"t": 1786067619.8260908, "n": 8294, "h": "80f2c295350ce64b", "c": "setWebhook(['url' => 'https://9774-20-13-34-208.ngrok-free.app/api/telegram/webhook']);\n public function webhook(Request $request)\n {\n $telegram = new Api(env('TELEGRAM_BOT_TOKEN'));\n $update = $telegram->getWebhookUpdate();\n\n // if (!$update->getMessage() || !$update->getMessage()->getText()) {\n // return; // Only process text messages\n // }\n\n $chatId = $update->getMessage()->getChat()->getId();\n $message = $update->getMessage()->getText();\n\n\n // $user = Member::firstOrCreate(['telegram_id' => $chatId, \"token_balance\" => \"1000000\"]);\n $user = Member::where(\"telegram_id\", $chatId)->first();\n if ($user == null) {\n $user = Member::create([\n 'telegram_id' => $chatId,\n \"token_balance\" => \"1000000\"\n ]);\n }\n\n if ($user->token_balance <= 0) {\n $telegram->sendMessage([\n 'chat_id' => $chatId,\n 'text' => \"⚠️ You no get enough token again.\\n\\nBuy more token to continue. πŸ™\"\n ]);\n return;\n }\n\n // Save user message\n Conversation::create([\n 'member_id' => $user->id,\n 'role' => 'user',\n 'message' => $message\n ]);\n\n $response = $this->callDeepSeek($user, $message);\n\n // Save assistant message\n Conversation::create([\n 'member_id' => $user->id,\n 'role' => 'assistant',\n 'message' => $response\n ]);\n\n // Deduct token\n $user->decrement('token_balance');\n $user->tokenTransactions()->create(attributes: ['tokens_used' => 1]);\n\n $telegram->sendMessage([\n 'chat_id' => $chatId,\n 'text' => $response,\n 'parse_mode' => 'Markdown'\n ]);\n }\n\n protected function callDeepSeek(Member $user, string $newMessage): string\n {\n $chatHistory = Conversation::where('member_id', $user->id)\n ->latest()->take(10)->get()->reverse();\n\n\n $messages = [\n [\n 'role' => 'system',\n 'content' => << $entry->role,\n 'content' => $entry->message\n ];\n }\n\n $messages[] = ['role' => 'user', 'content' => $newMessage];\n\n $res = Http::withToken(env('DEEPSEEK_API_KEY'))\n ->post('https://api.deepseek.com/v1/chat/completions', [\n 'model' => 'deepseek-chat',\n 'messages' => $messages,\n ]);\n\n return $res->json()['choices'][0]['message']['content'] ??\n \"Hmm... I no too understand wetin you mean. πŸ™ˆ Try again.\";\n\n // $res = Http::withHeaders([\n // 'Authorization' => 'Bearer ' . env('TOGETHERAI'),\n // 'Content-Type' => 'application/json',\n // ])\n // ->post('https://api.together.xyz/v1/chat/completions', [\n // \"model\" => \"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8\",\n // \"messages\" => $messages,\n // // \"temperature\" => 1.5,\n // \"stream\" => false\n // ]);\n\n return $res->json()['choices'][0]['message']['content'] ??\n \"Hmm... I no too understand wetin you mean. πŸ™ˆ Try again.\";\n\n\n }\n}\n"}}}}