diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 2736a87..235287c 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -8,6 +8,8 @@ use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Session; class AuthController extends Controller { @@ -15,7 +17,28 @@ class AuthController extends Controller public function login(LoginRequest $request): JsonResponse { - if ($this->attemptLogin($request)) + $inputTelephoneId = $request->input('telephone_id'); + + $user = User::where('username', $request->username)->first(); + + if ($user->is_online && !empty($user->telephone_id)) { + return $this->errorResponse(__('messages.user_already_online'), 409); // 409 Conflict + + } + if (!empty($inputTelephoneId)) { + $previousUserOnThisSystem = User::where('telephone_id', $inputTelephoneId) + ->where('is_online', false) + ->first(); + + if ($previousUserOnThisSystem) { + DB::table('sessions') + ->where('user_id', $previousUserOnThisSystem->id) + ->delete(); + } + } + + + if ($this->attemptLogin($request)) { $request->session()->regenerate(); $this->updateUserInfo($request); @@ -35,9 +58,13 @@ class AuthController extends Controller Auth::user()->update([ 'last_login' => now(), 'telephone_id' => $request->telephone_id, + 'is_online' => true ]); + DB::table('sessions') + ->where('user_id', Auth::id()) + ->where('id', '!=', Session::getId()) + ->delete(); } - public function logout(Request $request): JsonResponse { Auth::user()->update([