184 lines
5.7 KiB
PHP
184 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Services\OnlineUsersService;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class OnlineUsersController extends Controller
|
|
{
|
|
protected OnlineUsersService $onlineUsersService;
|
|
|
|
public function __construct(OnlineUsersService $onlineUsersService)
|
|
{
|
|
$this->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);
|
|
}
|
|
}
|
|
}
|