From c5361a570662784004d7ebbef85f24435825caf3 Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 1 Aug 2026 15:53:10 +0330 Subject: [PATCH] fix some bugs from chart --- .../Controllers/Admin/CustomerController.php | 47 +++++++++++++++++++ routes/admin.php | 1 + 2 files changed, 48 insertions(+) diff --git a/app/Http/Controllers/Admin/CustomerController.php b/app/Http/Controllers/Admin/CustomerController.php index fb4c320..f285833 100644 --- a/app/Http/Controllers/Admin/CustomerController.php +++ b/app/Http/Controllers/Admin/CustomerController.php @@ -78,6 +78,53 @@ class CustomerController extends SuperController ]); } + /** + * حضور سبک برای چت پشتیبانی: chat_room_id / chat_user_id → last_seen_at + * (همان منبع آنلاین بودن صفحه‌ی کاربران آنلاین). + */ + public function chatPresence() + { + $hasRoom = \Schema::hasColumn('customers', 'chat_room_id'); + $hasUser = \Schema::hasColumn('customers', 'chat_user_id'); + + if (! $hasRoom && ! $hasUser) { + return response()->json([ + 'online_within_seconds' => CustomerPresenceService::ONLINE_THRESHOLD_SECONDS, + 'rows' => [], + ]); + } + + $columns = ['id', 'last_seen_at']; + if ($hasRoom) { + $columns[] = 'chat_room_id'; + } + if ($hasUser) { + $columns[] = 'chat_user_id'; + } + + $query = Customer::query() + ->where('is_archive', false) + ->select($columns); + + $query->where(function ($q) use ($hasRoom, $hasUser) { + if ($hasRoom) { + $q->orWhere(function ($inner) { + $inner->whereNotNull('chat_room_id')->where('chat_room_id', '!=', ''); + }); + } + if ($hasUser) { + $q->orWhere(function ($inner) { + $inner->whereNotNull('chat_user_id')->where('chat_user_id', '!=', ''); + }); + } + }); + + return response()->json([ + 'online_within_seconds' => CustomerPresenceService::ONLINE_THRESHOLD_SECONDS, + 'rows' => $query->get(), + ]); + } + public function updateAdmin(Request $request , $id) { $data = $request->all(); diff --git a/routes/admin.php b/routes/admin.php index 923eb66..fe381d7 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -106,6 +106,7 @@ Route::middleware('auth:user')->group(function (){ //--------customer Route::post('/customer/table',[CustomerController::class,'tableWallets']); Route::get('/customer/online',[CustomerController::class,'onlineList']); + Route::get('/customer/chat-presence',[CustomerController::class,'chatPresence']); Route::get('/customer/{id}/assets',[CustomerController::class,'assetsSummary']); Route::get('/customer/active/{id}',[CustomerController::class,'active']); Route::get('/customer/archive/{id}',[CustomerController::class,'archive']);