validate([ 'email' => 'required|email', 'password' => 'required', ]); $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { return $this->sendError('Invalid credentials', [], 401); } $token = $user->createToken('api-token')->plainTextToken; return $this->sendResponse([ 'user' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, ], 'token' => $token, 'token_type' => 'Bearer', ], 'Login successful'); } catch (ValidationException $e) { return $this->sendValidationError($e->errors()); } catch (\Exception $e) { return $this->sendError('Login failed: ' . $e->getMessage(), [], 500); } } /** * Register a new user */ 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('api-token')->plainTextToken; return $this->sendResponse([ 'user' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, ], 'token' => $token, 'token_type' => 'Bearer', ], 'Registration successful', 201); } catch (ValidationException $e) { return $this->sendValidationError($e->errors()); } catch (\Exception $e) { return $this->sendError('Registration failed: ' . $e->getMessage(), [], 500); } } /** * Logout user (revoke token) */ public function logout(Request $request): JsonResponse { try { $request->user()->currentAccessToken()->delete(); return $this->sendResponse(null, 'Logged out successfully'); } catch (\Exception $e) { return $this->sendError('Logout failed: ' . $e->getMessage(), [], 500); } } /** * Get current authenticated user */ public function me(Request $request): JsonResponse { return $this->sendResponse([ 'user' => [ 'id' => $request->user()->id, 'name' => $request->user()->name, 'email' => $request->user()->email, ], ], 'User retrieved successfully'); } }