onlineUsersService = $onlineUsersService; } /** * Get list of online users * * @param Request $request * @return JsonResponse */ public function index(Request $request): JsonResponse { try { $timeoutMinutes = 5; // Fixed to 5 minutes $onlineUsers = $this->onlineUsersService->getOnlineUsers($timeoutMinutes); return response()->json([ 'success' => true, 'data' => $onlineUsers, 'meta' => [ 'timeout_minutes' => $timeoutMinutes, 'total_online' => $onlineUsers->count(), 'timestamp' => now()->toISOString() ], 'message' => 'Online users retrieved successfully.' ]); } catch (\Exception $e) { Log::error('Error fetching online users: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to retrieve online users.', 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' ], 500); } } /** * Get online users count * * @param Request $request * @return JsonResponse */ public function count(Request $request): JsonResponse { try { $timeoutMinutes = 5; // Fixed to 5 minutes $count = $this->onlineUsersService->getOnlineUsersCount($timeoutMinutes); return response()->json([ 'success' => true, 'data' => [ 'count' => $count, 'timeout_minutes' => $timeoutMinutes ], 'message' => 'Online users count retrieved successfully.' ]); } catch (\Exception $e) { Log::error('Error fetching online users count: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to retrieve online users count.', 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' ], 500); } } /** * Get online users statistics * * @return JsonResponse */ public function stats(): JsonResponse { try { $stats = $this->onlineUsersService->getOnlineUsersStats(); return response()->json([ 'success' => true, 'data' => $stats, 'message' => 'Online users statistics retrieved successfully.' ]); } catch (\Exception $e) { Log::error('Error fetching online users stats: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to retrieve online users statistics.', 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' ], 500); } } /** * Get current user's session information * * @param Request $request * @return JsonResponse */ public function mySession(Request $request): JsonResponse { try { $user = $request->user(); if (!$user) { return response()->json([ 'success' => false, 'message' => 'User not authenticated.' ], 401); } $sessionInfo = $this->onlineUsersService->getUserSessionInfo($user->id); if (!$sessionInfo) { return response()->json([ 'success' => false, 'message' => 'No active session found.' ], 404); } return response()->json([ 'success' => true, 'data' => $sessionInfo, 'message' => 'Session information retrieved successfully.' ]); } catch (\Exception $e) { Log::error('Error fetching user session info: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to retrieve session information.', 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' ], 500); } } /** * Clear online users cache (admin only) * * @return JsonResponse */ public function clearCache(): JsonResponse { try { $this->onlineUsersService->clearCache(); return response()->json([ 'success' => true, 'message' => 'Online users cache cleared successfully.' ]); } catch (\Exception $e) { Log::error('Error clearing online users cache: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Failed to clear cache.', 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' ], 500); } } }