userService = $userService; $this->otpService = $otpService; } /** ---------------- Register ---------------- */ public function register(RegisterRequest $request) { $user = $this->userService->registerUser($request->validated()); return $this->successResponse( 'Registered successfully. Please check your email for OTP verification code.', ['email' => $user->email] ); } public function login(LoginRequest $request) { $result = $this->userService->loginUser($request->validated()); if (isset($result['error'])) { return $this->errorResponse($result['error'], $result['code'] ?? 400); } return $this->successResponse('Login successful', [ 'token' => $result['token'], 'user' => $result['user'] ]); } /** ---------------- Forgot Password ---------------- */ public function forgotPassword(CheckEmailRequest $request) { $user = User::where('email', $request->email)->first(); $this->otpService->sendOtp($user, 'password_reset'); return $this->successResponse( 'Password reset OTP has been sent to your email.', ['email' => $user->email] ); } /** ---------------- Resend OTP ---------------- */ public function resendOtp(Request $request) { $request->validate([ 'email' => 'required|email|exists:users,email', 'type' => 'required|in:email_verification,password_reset' ]); $user = User::where('email', $request->email)->first(); try { $this->otpService->resendOtp($user, $request->type); return $this->successResponse( 'OTP has been resent to your email.', ['email' => $user->email] ); } catch (\Illuminate\Validation\ValidationException $e) { return $this->errorResponse($e->getMessage(), 429); } } public function logout(Request $request) { $request->user()->currentAccessToken()->delete(); return $this->successResponse('Logged out successfully'); } /** ---------------- Google OAuth ---------------- */ public function handleGoogleCallback(LoginGoogleRequest $request) { $result = $this->userService->loginGoogleUser( $request->validated()['access_token'] ); if (isset($result['error'])) { return $this->errorResponse($result['error'], $result['code'] ?? 400); } return $this->successResponse('Google login successful', [ 'token' => $result['token'], 'user' => $result['user'] ]); } }