validate([ 'email' => 'required|email', 'password' => 'required' ]); if (!Auth::attempt($validated)) { return response()->json([ 'success' => false, 'message' => 'Invalid credentials' ], 401); } $user = User::where('email', $validated['email'])->first(); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'success' => true, 'message' => 'Login successful', 'data' => [ 'user' => $user, 'token' => $token, 'token_type' => 'Bearer' ] ]); } catch (ValidationException $e) { return response()->json([ 'success' => false, 'message' => 'Validation failed', 'errors' => $e->errors() ], 422); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Login failed', 'error' => $e->getMessage() ], 500); } } /** * Handle user registration * * @param Request $request * @return JsonResponse */ public function register(Request $request): JsonResponse { try { $validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8|confirmed' ]); $user = User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']) ]); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'success' => true, 'message' => 'Registration successful', 'data' => [ 'user' => $user, 'token' => $token, 'token_type' => 'Bearer' ] ], 201); } catch (ValidationException $e) { return response()->json([ 'success' => false, 'message' => 'Validation failed', 'errors' => $e->errors() ], 422); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Registration failed', 'error' => $e->getMessage() ], 500); } } /** * Handle user logout * * @param Request $request * @return JsonResponse */ public function logout(Request $request): JsonResponse { try { $request->user()->currentAccessToken()->delete(); return response()->json([ 'success' => true, 'message' => 'Successfully logged out' ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Logout failed', 'error' => $e->getMessage() ], 500); } } /** * Get authenticated user details * * @param Request $request * @return JsonResponse */ public function me(Request $request): JsonResponse { try { return response()->json([ 'success' => true, 'data' => [ 'user' => $request->user() ] ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Failed to fetch user details', 'error' => $e->getMessage() ], 500); } } }