otpService = $otpService; } /** * Verify Email OTP */ public function verify(Request $request) { $request->validate([ 'email' => 'required|email|exists:users,email', 'otp' => 'required|digits:6', ]); $user = User::where('email', $request->email)->first(); try { $this->otpService->verifyOtp($user, 'email_verification', $request->otp); $user->update([ 'is_verified' => true, 'email_verification_otp' => null, 'email_verification_otp_expires_at' => null, ]); $token = $user->createToken('auth_token')->plainTextToken; return response()->json([ 'success' => true, 'message' => 'Email verified successfully', 'data' => [ 'token' => $token, 'user' => $user ] ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 400); } } /** * Resend OTP */ public function resend(Request $request) { $request->validate([ 'email' => 'required|email|exists:users,email' ]); $user = User::where('email', $request->email)->first(); try { $this->otpService->resendOtp($user, 'email_verification'); return response()->json([ 'success' => true, 'message' => 'OTP resent successfully', 'data' => ['email' => $user->email] ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 400); } } }